我有一份以下表格的文件:
{
"_id" : <id of document>,
"inventory" : [
{
"entity_id" : "<id>",
"ad_type" : "ADTYPE"
}
]
}
我不确定mongo中是否可以这样做但是我正在尝试在上面的文档中构建一个upsert查询,如果库存不存在我会插入一个空数组,如果存在则推送到数组中库存有一个或多个元素。
我尝试使用findAndModify功能,但我认为这不会起作用。
答案 0 :(得分:1)
db.collection.find({"_id":"value"}).forEach(
function(doc){
if(doc.hasOwnProperty('inventory'))
{
db.collection.update({"_id":doc._id},
{"$push":{"inventory": "new value"}});
}
else
{
db.collection.update({"_id":doc._id},
{"$set":{"inventory": new Array() }});
}
});
答案 1 :(得分:0)
“collection”是数组,“subcollection”是对象。 该脚本将新字段“rank”添加到索引为1的数组元素。 如果该字段不存在,则脚本将创建“rank”并设置值,如果该字段存在脚本更新值。
db.userCollection.update(
{ "_id": ObjectId("5a1e7aefd1928362e53c5c48"),
$and: [ { "collection.1.subcollection.id": "1234" },
{ "collection.1.rank": {"$ne": -1 }}
]
},
{ $set: { "collection.1.rank": "5" }
}
)