mongo update:upsert数组

时间:2018-01-23 17:15:10

标签: arrays mongodb mongodb-query

我想基于doc _id和element _id在数组中嵌入一个元素。目前它仅在元素已经在数组中时才起作用(更新工作,不插入)。

所以,这些集合:

[{
        "_id": "5a65fcf363e2a32531ed9f9b",
        "ressources": [
            {
                "_id": "5a65fd0363e2a32531ed9f9c"
            }
        ]
    }]

收到此请求:

query = { _id: '5a65fcf363e2a32531ed9f9b', 'ressources._id': '5a65fd0363e2a32531ed9f9c' };
update = { '$set': { 'ressources.$': { '_id': '5a65fd0363e2a32531ed9f9c', qt: '153', unit: 'kg' } } };
options = {upsert:true};
collection.update(query,update,options);

会给出这个好结果:

[{
        "_id": "5a65fcf363e2a32531ed9f9b",
        "ressources": [
            {
                "_id": "5a65fd0363e2a32531ed9f9c",
                "qt": 153,
                "unit": "kg"
            }
        ]
    }]

如何使用这些初始集合执行相同的请求:

    [{
        "_id": "5a65fcf363e2a32531ed9f9b"
    }]

OR

[{
        "_id": "5a65fcf363e2a32531ed9f9b",
        "ressources": []
    }]

如何使upsert工作? upsert是否仅适用于整个文档? 目前,我遇到了这个错误:

位置操作员未找到查询所需的匹配项。

由于

1 个答案:

答案 0 :(得分:0)

我也试图弄清楚该怎么做。我发现只有一种方法:

  1. 通过id获取模型
  2. 手动更新数组(通过javascript)
  3. 保存模型

遗憾地知道,在2018年你仍然必须做这样的东西吧。

更新:

这将更新viewData数组中的特定元素

db.collection.update({
    "_id": args._id, 
    "viewData._id": widgetId
}, 
{
    $set: {
        "viewData.$.widgetData": widgetDoc.widgetData
    } 
})

$push命令将添加新项目