Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays mongo更新:在数组中插入一个元素_Arrays_Mongodb_Mongodb Query - Fatal编程技术网

Arrays mongo更新:在数组中插入一个元素

Arrays mongo更新:在数组中插入一个元素,arrays,mongodb,mongodb-query,Arrays,Mongodb,Mongodb Query,我想根据doc\u id和element\u id在数组中向上插入一个元素。当前,仅当数组中的元素已准备就绪时(更新有效,插入无效) 因此,这些收集: [{ "_id": "5a65fcf363e2a32531ed9f9b", "ressources": [ { "_id": "5a65fd0363e2a32531ed9f9c" } ] }] 收到此请求: q

我想根据doc\u id和element\u 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);
将给出此ok结果:

[{
        "_id": "5a65fcf363e2a32531ed9f9b",
        "ressources": [
            {
                "_id": "5a65fd0363e2a32531ed9f9c",
                "qt": 153,
                "unit": "kg"
            }
        ]
    }]
如何使相同的请求与这些初始集合一起工作:

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

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

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


谢谢

我也试着想办法。我发现只有一种方法:

  • 按id获取模型
  • 手动更新数组(通过javascript)
  • 保存模型
  • 遗憾的是,2018年你还得做这样的事情

    更新:

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

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

    $push
    命令将添加新项目

    这是不可能的。解决方法此更新是否遵循特定版本的mongo?此示例在元素不在数组中的情况下不执行插入。
    db.collection.update({
        "_id": args._id, 
        "viewData._id": widgetId
    }, 
    {
        $set: {
            "viewData.$.widgetData": widgetDoc.widgetData
        } 
    })