【问题标题】:nested array inserting in mongodb?嵌套数组插入mongodb?
【发布时间】:2014-01-30 19:05:47
【问题描述】:

我正在使用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 字段?

【问题讨论】:

    标签: mongodb meteor multidimensional-array mongodb-query


    【解决方案1】:

    问题在于流星使用的 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

    【讨论】:

    • 这就是我插入集合的方式 'Polls_Col.insert({question: quest, option1:[{pd:op1,ids:[]}], option2:[{pd:op2 ,ids:[]}], option3:[{pd:op3,ids:[]}], option4:[{pd:op4,ids:[]}] });'这就是我尝试在代码中更新 Polls_Coll.update({_id:this._id},{$push:{'option1.$.ids':'hooya'}});我在浏览器控制台中试过这个也不起作用 Polls_Coll.update({_id:"soeg9ezkMwKFmdPkT","option1.pd": "android"},{$push: { "option1.$.ids": 6 }}) 我在 js 文件顶部声明这个集合并从服务器端发布
    • 并在客户端订阅。现在我在控制台 Polls_Coll.update({_id:"soeg9ezkMwKFmdPkT","option1.pd": "android"},{$push: { "option1.$.ids": 6 }}) 尝试了这个,现在它显示错误错误:不允许。不受信任的代码只能按 ID 更新文档。 [403] 虽然我给了身份证。感谢您的帮助
    • 是的,这就是问题所在。更新了答案注释和您的问题以澄清这是 minimongo 的 Meteor 问题。您将无法对此数据使用透明的“更新”方法,需要汇总更传统的 RPC 调用。
    • 嘿,尼尔,感谢您的帮助,我是这个 stackoverflow 的新手。一旦我得到这 15 个声望点,我肯定会投票给你的答案。抱歉耽搁了
    猜你喜欢
    • 2015-04-02
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    相关资源
    最近更新 更多