我想使用一个mongo查询将新字段添加到我的一个集合中的所有mongo对象中。该新字段将被初始化为其对象中另一个字段的值。
说Mongo对象就像:
{
"_id" : "24a1aefe-7242-4104-b6a9-8f9993b22019",
"attributes" : {
"product name" : "Duracell Aa Batteries 2 Pc"
},
"sku_id" : "4_5",
"state" : "ENABLED"
}
我想制作所有mongo对象,例如:
{
"_id" : "24a1aefe-7242-4104-b6a9-8f9993b22019",
"attributes" : {
"product name" : "Duracell Aa Batteries 2 Pc"
},
"sku_id" : "4_5",
"new_sku_id": "4_5"
"state" : "ENABLED"
}
我能够使用pymongo做到这一点,但这需要将多个更新查询触发到mongo服务器并在for循环中工作。
是否有单个mongo查询可以解决我的问题?请帮忙。
我正在使用以下不起作用的mongo查询:
db.skus.update({},{“ $ set”:{“ new_sku_id”:“ $ sku_id”}},{multi:true})
但这不起作用。它产生以下mongo对象:
{
"_id" : "24a1aefe-7242-4104-b6a9-8f9993b22019",
"attributes" : {
"product name" : "Duracell Aa Batteries 2 Pc"
},
"sku_id" : "4_5",
"new_sku_id": "$sku_id"
"state" : "ENABLED"
}
请帮助
答案 0 :(得分:1)
您不能在update
语句中引用其他字段,但是可以使用$addFields生成该字段,并使用$out用聚合输出重写现有集合:
db.collection.aggregate([
{
$addFields: {
new_sku_id: "$sku_id"
}
},
{ $out: "collection" }
])
答案 1 :(得分:0)
在mongo集合中,您可以运行此命令。这将花费一些时间,具体取决于集合中文档的数量。
db.getCollection('skus').find({}).forEach(function(obj){
db.getCollection('skus').update({_id:obj._id},{$set:{new_sku_id: obj.sku_id}})
})