首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$addToSet和upsert

$addToSet和upsert
EN

Stack Overflow用户
提问于 2013-08-21 04:26:18
回答 1查看 1.3K关注 0票数 3

我知道我不能同时使用upsert和位置运算符,但是如果我插入的对象的某些字段与数组中现有对象的某些字段不匹配,我会寻找away来附加到数组中。

因此,如果我有下面的现有文档,我想检查'field‘字段的值,如果字段匹配,则更新/替换该子文档,如果不匹配,则简单地附加到数组中。

代码语言:javascript
复制
{
    myArray:[
         {
            field:'xyz'
         }       
    ]
}

在node.js中有没有好的方法可以做到这一点?我使用的是本地驱动程序。

EN

回答 1

Stack Overflow用户

发布于 2013-09-21 04:13:39

我不认为你可以在一个查询中做到这一点。您可以在本机驱动程序中使用两个单独的查询来完成此操作。第一个查询将尝试更新数组中的字段。如果它没有在数组中找到匹配的文档,它会调度第二个查询,将文档追加到数组中。

代码语言:javascript
复制
db.collection('coll').update({_id: _id, "myArray": {field: "xyz"}}, {"$set": {"myArray.$": {field: "xyzt"}}}, {upsert: true}, function(err, res) {
    if (err && err.code == 16836) { // no document was matched
        db.collection('coll').update({_id: _id}, {"$push": {myArray: {field: "xyzt"}}}, function(err, res) {
            console.log("Inserted document in array");
        }); 
    }
    console.log("Updated document in array");
}); 
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18344376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档