在mongodb插入嵌套数组?

时间:2014-01-30 19:05:47

标签: mongodb meteor multidimensional-array mongodb-query

我正在使用Meteor我有一个mongodb文档,其中插入的内容包含以下代码:

Poll_Coll.insert({question:quest,option1:[{pd:op1,ids:[]}],
        option2:[{pd:op2,ids:[]}],
        option3:[{pd:op3,ids:[]}],
        option4:[{pd:op4,ids:[]}]});

我想更新option1.ids数组中的多个ID,我尝试这样做:

Polls_Coll.update({_id:"xxxx","option1.pd":"xxx"},{$push:{"option1.$.ids":6}});
Polls_Coll.update({_id:"xxxxx","option1.pd":"xxx"},{$push:{"option1.$.ids":{id:"ya"}}});

option1.pd工作正常。我尝试了上述两个命令并收到错误

  

错误:MinimongoError:无法使用字符串字段名称附加到数组[$] [409]

如何插入该ids字段?

1 个答案:

答案 0 :(得分:3)

问题在于meteor正在使用的minimongo实现,因为它目前不支持位置$运算符。

从以下数据示例中,操作在mongo shell中运行

{
    "_id" : ObjectId("52eb0a6542b2498fd49f4f28"),
    "question" : "quest",
    "option1" : [
            {
                    "pd" : "op1",
                    "ids" : [ ]
            },
            {
                    "pd" : "op7",
                    "ids" : [ ] 
            }
    ],
    "option2" : [
            {
                    "pd" : "op2",
                    "ids" : [ ]
            }
    ],
    "option3" : [
            {
                    "pd" : "op3",
                    "ids" : [ ]
            }
    ],
    "option4" : [
            {
                    "pd" : "op4",
                    "ids" : [ ]
            }
    ]
}

应用以下语句会将值推送到匹配元素的'ids'数组。

db.poll.update({"option1.pd": "op1"},{$push: { "option1.$.ids": 6 }})

基本上相同的代码也适用于服务器端。

似乎解决方案是将此更新包装在可以从客户端调用并在服务器上执行代码的函数调用中。

以下是确认问题的一些链接:

https://github.com/meteor/meteor/issues/153

https://github.com/meteor/meteor/blob/master/packages/minimongo/NOTES