我正在努力教自己Meteor和Mongo。我的Meteor方法中有一个特殊的插入,这让我疯狂。
我的文档对象如下所示:
{
_id
name: "name",
stuff: {},
array: [
{
id: 0,
target:[
{
id: 0,
name: "1"
},{
id: 1,
name: "2"
}
]
},{
id: 1,
target:[
{
id: 0,
name: "A"
},{
id: 1,
name: "B"
}
]
}
],
}
我正在尝试将对象添加到目标数组中,该数组位于数组数组内的对象内。
基于我在堆栈溢出时看到的一些事情,我已经尝试了几天不同的方法。最近的尝试是:
Documents.update({_id: id, 'array.id': arrayId}, {$addToSet:{'array.$.target': objectToInsert}},{upsert: false, multi: false})
如果有人能指出我正确的方向,我会很感激。
答案 0 :(得分:0)
似乎这可能是您进行更新的地方的问题。如果这是在客户端上,请参见此处:
Update an subdocument contained in an array contained in a MongoDB document
解决方法是将其移至服务器。
此外,您可能希望查看$ addToSet和$ push MongoDb: Difference between $push/$addtoset
之间的区别如果这不在客户端并且更改为推送无法解决您的问题,您可以在问题中添加错误是什么。
答案 1 :(得分:0)
我不知道mongo查询要做这样的事情,但可以按照以下方式完成
let theArray=Document.findOne({_id:id}).array,
arrayOfIds=_.pluck(theArray,"id"),
index=_.indexOf(arrayOfIds,arrayId),
theArray[index].target.push(objectTobeInserted)
现在使用修改后的数组
更新文档Document.update({_id:id},{$set:{array:theArray})
如果你不理解_.pluck和_.indexOf,你可以参考underscorejs