我将文档存储在具有以下形式的集合中:
{
_id: ObjectId(""),
...
match:{
status: 'active',
list: [{
_id: ObjectId("") // a referance to another document
status: 'active' // can be active, seen, send
},{
..
}, ..]
}
}
我执行collection('A').find()
检索此文档,然后检索所有引用对象collection('B').find()
。一切都被发送到浏览器进行人工检查。
假设有10个B与特定文档表单集合A关联。在浏览器管理员标记其中三个发送。现在文件A看起来像这样:
{
_id: ObjectId(""),
...
match:{
status: 'active',
list: [{
_id: ObjectId("")
status: 'seen'
},{
_id: ObjectId("")
status: 'send'
}, ..]
}
}
基本上从我们的10个B的三个被标记为“发送”但其余所有(本例中为7个)标记为已显示。
现在A被发送回服务器并应该更新。这样做的简单方法是
db.collection('A').update({_id: a._id}, {$set{match.list: a.match.list}}, function(err, result){..});
但是有一个问题。管理员检查设备的时间可能很长,最长可达一小时。很可能在A中推送新的相关B.
我可以先取出物品,然后推出新值,但这看起来很难看。有没有内置的方法来处理这种情况?我只需要更新数组中的特定项。
我检查了$ positional operator,但似乎我只匹配数组中的一个对象。