在嵌套数组 mongodb nodejs 中插入对象

Posted

技术标签:

【中文标题】在嵌套数组 mongodb nodejs 中插入对象【英文标题】:Insert object in nested array mongodb nodejs 【发布时间】:2015-04-13 20:04:46 【问题描述】:

所以我试图在参数中插入一个对象,但没有成功。我的 mongodb 结构如下所示:

[
    
        "_id": "04",
        "name": "test service 4",
        "id": "04",
        "version": "0.0.1",
        "title": "testing",
        "description": "test",
        "protocol": "test",
        "operations": [
            
                "_id": "99",
                "oName": "test op 52222222222",
                "sid": "04",
                "name": "test op 52222222222",
                "oid": "99",
                "parameters": ,
                "description": "testing",
                "returntype": "test"
            ,
            
                "_id": "58",
                "oName": "test op 52222222222",
                "sid": "04",
                "name": "test op 52222222222",
                "oid": "58",
                "parameters": ,
                "description": "testing",
                "returntype": "test"
            
        ]
    
]

我希望能够将对象添加到具有基本详细信息(例如名称、ID 和类型)的参数中。我不完全确定如何解决这个问题,因为在参数部分之前我已经实现了所有其他 CRUD 操作。我应该如何去完成这个?我知道 mongodb 在尝试将某些内容插入数组中的数组时会出现问题,因此,如果有人对如何完成此操作有任何建议,我将不胜感激。谢谢。

其中一个问题是我无权访问根对象的 _id,但我确实拥有用于插入参数的操作的 _id。因此,我尝试使用以下代码插入参数:

collection.update("operations":"$elemMatch": "oid": oid, '$addToSet':"operations.parameters":  name: "test" , safe:true, function(err, result) 
        if (err) 
            res.send('error':'An error has occurred');
         else 
            res.send(result[0]);
        
    );

但这不起作用。

【问题讨论】:

【参考方案1】:

我能够使用以下代码完成插入:

collection.update( "operations": $elemMatch: _id:oid, $addToSet:  "operations.$.parameters" : parameter, function(err, result) 
        if (err) 
            res.send('error':'An error has occurred');
         else 
            res.send(result[0]);
        
);

以防万一有人需要。

【讨论】:

【参考方案2】:

这是因为您需要使用positional operator,我从链接中复制的示例与您的情况几乎相同:

db.students.update(
    _id: 4, "grades.grade": 85 ,
    $set:  "grades.$.std" : 6  
)

【讨论】:

问题是这是通过 nodejs api 中的 post 调用完成的,在这种情况下,我无法访问 _id 04,这就是我执行 $elemMatch 的原因,我的也是数组中的数组(操作中的参数)。我已经通过硬编码初始 _id 尝试了这个示例,但它仍然不起作用 你有操作的_id。这在整个系列中是独一无二的吗?如果是这样,您可以使用$ 并匹配条件operations._id : <your _id>,与上面的示例非常相似。如果不是,则您的更新定义不明确。您想用给定的_id 更新一项操作吗?哪一个?你关心?您想用给定的_id 更新所有这些吗?

以上是关于在嵌套数组 mongodb nodejs 中插入对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在嵌套数组mongodb中插入数据?

如何使用 mongoose 和 NodeJs 在 Mongodb 的数组字段中插入数据

如何在mongodb的嵌套数组中添加数据

流星mongodb用_id插入一个嵌套的对象数组

Nodejs mongoose根据对象属性选择嵌套数组中的对象

如何从 1 分钟的嵌套数组数据中聚合 OHLC 5 分钟(mongodb、mongoose)