2014-01-30 95 views
2

我使用Meteor在那里我有哪里的东西插入下面的代码MongoDB的文档:在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工作正常。我尝试了上述两个命令,并得到错误

Error: MinimongoError: can't append to array using string field name [$] [409]

如何插入该ID字段?

回答

3

问题出在流星使用minimongo实现,因为它目前不支持位置$运算符。

从操作在蒙戈工作如下的数据样本壳

{ 
    "_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

+0

这是如何我插入集“Polls_Coll.insert({问题:任务, \t \t \t \t选项1:[{pd:op1,ids:[]}], \t \t \t \t \t选项2:[{PD:OP2,IDS:[]}], \t \t \t \t \t选项3:[{PD:OP3,IDS:[]}], \t \t \t \t \t选项4:[{PD:OP4 ,ids:[]}] \t \t \t \t \t});''这是我试图更新代码Polls_Coll.update({_ id:this._id},{$ push:{'option1。$。ids':'hooya'}});我在浏览器控制台尝试了这一点,这也不工作Polls_Coll.update({_ id:“soeg9ezkMwKFmdPkT”,“option1.pd”:“android”},{$ push:{“option1。$。ids”:6}})将此集合声明在js文件的顶部,并从服务器端 – Sasikanth

+0

发布并订阅到客户端。现在我试图在控制台Polls_Coll.update({_ id:“soeg9ezkMwKFmdPkT”,“option1.pd”:“android”},{$ push:{“option1。$。ids”:6}})现在它显示错误错误:不允许。不受信任的代码只能通过ID更新文档。 [403]虽然我给了身份证。感谢您的帮助 – Sasikanth

+0

是的,这将是问题。更新了关于答案和你的问题的说明,以澄清这是一个与minimongo相关的Meteor问题。您将无法对此数据使用透明的“更新”方法,并需要汇总更传统的RPC调用。 –