如何更新数组中的特定项? (MongoDB的)

时间:2017-06-18 11:55:54

标签: mongodb

我将文档存储在具有以下形式的集合中:

{
    _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,但似乎我只匹配数组中的一个对象。

0 个答案:

没有答案