我在表单的集合中有很多mongodb文档:
{
"_id" : ObjectId("5d02d179a2d0dead77a4c9c5"),
"distributed" : false,
"winner" : false,
"number" : "855254",
"dateCreated" : "13-06-2019 19:43:05",
"date" : ""
}
/* 2 */
{
"_id" : ObjectId("5d02d179a2d0dead77a4c9c7"),
"distributed" : false,
"winner" : false,
"number" : "263141",
"dateCreated" : "13-06-2019 19:43:05",
"date" : ""
}
我想将"number"
字段中的所有数据替换为:
{
"_id" : ObjectId("5d02d179a2d0dead77a4c9c5"),
"distributed" : false,
"winner" : false,
"number" : "8-55254",
"dateCreated" : "13-06-2019 19:43:05",
"date" : ""
}
/* 2 */
{
"_id" : ObjectId("5d02d179a2d0dead77a4c9c7"),
"distributed" : false,
"winner" : false,
"number" : "2-63141",
"dateCreated" : "13-06-2019 19:43:05",
"date" : ""
}
我已经尝试过某些方法,但是没有成功。
答案 0 :(得分:1)
从Mongo 4.2
开始(仍处于预发行版本),您可以利用db.collection.update()
现在接受聚合管道的事实,该聚合管道允许根据其当前值更新字段:
// { number: "855254" }
db.collection.update(
{},
[{ $set: {
number: { $concat: [
{ $substr: [ "$number", 0, 1 ] },
"-",
{ $substr: [ "$number", 1, -1 ] }
]}
}}],
{ multi: true }
)
// { number: "8-55254" }
第一部分{}
是匹配查询,用于过滤要更新的文档(在本例中为所有文档)。为了安全起见,您可以过滤number
值大小大于1的文档。
第二部分[{ $set: { number: { $concat: [ ... }]
是更新聚合管道:
不要忘记{ multi: true }
,否则只会更新第一个匹配的文档。