Meteor / Mongo,推入数组内对象内的数组

时间:2016-07-26 03:00:33

标签: mongodb meteor

我正在努力教自己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})

如果有人能指出我正确的方向,我会很感激。

2 个答案:

答案 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