我有这样的模特
{
"array1": [
{
"_id": "123",
"array2": [
{
"_id": "123",
"answeredBy": [],
}
],
}
]
}
如果我在array1中有id,请将文档推入array2或在array1中创建新文档。
例如:
如果我给了新对象
{
"_id": "456",
"answeredBy": [],
}
如果给出array1的_id为123
结果应该是
{
"array1":[
{
"_id":"123",
"array2":[
{
"_id":"123",
"answeredBy":[
],
},
{
"_id":"456",
"answeredBy":[
],
}
],
}
否则,如果给出除了123之外的array1的_id,即不存在,即657
结果sholud是
{
"array1":[
{
"_id":"123",
"array2":[
{
"_id":"123",
"answeredBy":[
],
},
],
} {
"_id":"657",
"array2":[
{
"_id":"456",
"answeredBy":[
],
}
],
}
结果应该是
我怎样才能做到这一点?
答案 0 :(得分:1)
除了推送两个更新外,您的问题是similar
。
无法以原子方式执行您的请求,因此您每个请求都需要两个更新查询。
在找到匹配的外部记录时更新,这会通过推送内部数组中的新元素来导致更新。
db.col.update(
{"array1._id": "123"},
{"$push":{"array1.$.array2":{"_id":"456","answeredBy":[]}}}
)
当外部记录不匹配时更新,您将被修改为0。
db.col.update(
{"array1._id": "657"},
{"$push":{"array1.$.array2":{"_id":"456","answeredBy":[]}}}
)
if(nModified == 0) {
db.col.update(
{},
{"$push":{"array1":{ "_id":"657","array2":[{"_id":"456","answeredBy":[]}}}}
)
}
您可以阅读链接的答案以获取更多详细信息。