我想在投影中做一个替换。就像 SQL Server 替换一样。我很确定我们可以在代码中处理它,但正在寻找一些 shell 命令。
这是我所拥有的
db.OrderHistoryHeader.aggregate([
{
$project:{
"_id":0,
"OrderNo":1 // I want to do Replace(OrderNo,'XYZ','ABC')
}
}
],
{
allowDiskUse:true
}).pretty();
目前没有内置运算符,但您可以将$indexOfBytes与$substr和$concat结合使用。
db.OrderHistoryHeader.aggregate([
{
$addFields:
{
index: { $indexOfBytes: [ "$OrderNo", "XYZ" ] },
}
},
{
$project: {
OrderNo: {
$concat: [
{ $substr: [ "$OrderNo", 0, "$index" ] },
"ABC",
{ $substr: [ "$OrderNo", { $add: [3, "$index"] }, -1 ] }
]
}
}
},
{
$project: {
index: 0
}
}
])
其中3
是要替换的文本的长度。
您可以使用 replaceOne 方法db.collection.replaceOne(filter, replacement, options(
从文档:行为replaceOne(( 使用替换文档替换集合中与筛选器匹配的第一个匹配文档。
更新插入如果 upsert: true 并且没有文档与过滤器匹配,db.collection.replaceOne(( 会基于替换文档创建一个新文档。