我使用Mongodb和Mongoskin。我有以下数据结构:
clients: {
firstArray: [
{
_id: '153'.
someField1: 'someVal1',
someField2: 'someVal2'
}
...
]
secondArray: [
{
_id: '7423'.
someField1: 'someVal1',
someField2: 'someVal2',
firstArrayIds: ['153, 154, 155, ...']
}
...
]
}
以某种方式{@ 1}}某个对象可能$push
,并在同一查询中将firstArray
添加到_id
¨?
答案 0 :(得分:3)
谁说你不能这样做?它非常简单,因为$push
是一个顶级"更新修饰符,因此采用"文档级别"论证案例:
db.collection.update(
{ "_id": someDocumentId, "secondArray._id": 7423 },
{
"$push": {
"firstArray": someNewObject,
"secondArray.$.firstArrayIds": someNewObject._id
}
}
);
因此positional $
运算符允许您更新" secondArray"的元素。符合你的条件。
你不能做的唯一事情是匹配文档中多个数组元素的元素,并要求那些"位置"要被更新。正如文档所述,只有第一个匹配索引才会存储给位置运算符。
但是在你要求做的事情上,这只需要一次匹配,那么这很好。