【问题标题】:mongo update : upsert an element in arraymongo update : 在数组中插入一个元素
【发布时间】:2018-07-02 14:32:29
【问题描述】:

我想根据 doc _id 和元素 _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"
    }]

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

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

位置运算符没有从查询中找到所需的匹配项。

谢谢

【问题讨论】:

  • 不可能。解决方法here

标签: arrays mongodb mongodb-query


【解决方案1】:

我也试图弄清楚如何去做。我只找到了一种方法:

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

很遗憾知道在 2018 年你仍然需要做类似的事情。

更新:

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

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

$push 命令将添加新项目

【讨论】:

  • 此更新是否遵循特定版本的 mongo?
  • 本示例在元素不在数组中的情况下不执行插入。
猜你喜欢
  • 2015-04-02
  • 2020-10-28
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
相关资源
最近更新 更多