在嵌套数组 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 中插入对象的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 mongoose 和 NodeJs 在 Mongodb 的数组字段中插入数据