首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果没有包含数组的相应查询字段,MongoDB更新$push就不能应用位置运算符

如果没有包含数组的相应查询字段,MongoDB更新$push就不能应用位置运算符
EN

Stack Overflow用户
提问于 2013-04-25 07:51:30
回答 2查看 3K关注 0票数 1

模型:

代码语言:javascript
运行
复制
{
    "_id" : "a62107e10f388c90a3eb2d7634357c8b",
    "_appid" : [
        {
            "_id" : "1815aaa7f581c838",
            "events" : [
                {
                    "_id" : "_TB_launch",
                    "boday" : [
                        {
                            "VERSIONSCODE" : "17",
                            "NETWORK" : "cmwap",
                            "VERSIONSNAME" : "2.4.0",
                            "IMSI" : "460026319223205",
                            "PACKAGENAME" : "com.androidbox.astjxmjmmshareMM",
                            "CHANNELID" : "xmjmm17",
                            "CHANNELNAME" : "浠..?.M寰.俊?.韩?.?1.x锛.,
                            "eventid" : "_TB_launch",
                            "uuid" : "a62107e10f388c90a3eb2d7634357c8b",
                            "creattime" : "1366300799766",
                            "ts" : ISODate("2013-04-25T06:28:36.403Z")
                        }
                    ],
                    "size" : 1
                }
            ],
            "size" : 1
        }
    ],
    "size" : 1
}
> db.events.update(
    {
        "_id":"039e569770cec5ff3811e7410233ed27",
        "_appid._id":"e880db04064b03bc534575c7f831a83a",
        "_appid.events._id":"_TB_launch"
    },
    {
        "$push":{
            "_appid.$.events.$.boday":{"111":"123123"}
        }
    }
);

如果没有包含数组的相应查询字段,则无法应用位置运算符。

为什么?!

EN

回答 2

Stack Overflow用户

发布于 2013-04-25 08:00:45

您正在尝试引用多个嵌入级别-您只能有一个位置$操作符。在此功能请求实现之前,您将无法执行这样的操作。

票数 2
EN

Stack Overflow用户

发布于 2013-05-08 18:22:16

回应在此简单的回答是,“不行”,但是使用嵌套数组会变得很棘手。下面是一个示例:

代码语言:javascript
运行
复制
db.foo.save({_id: 1, a1:[{_a1id:1, a2:[{a2id:1, a3:[{a3id:1, a4:"data"}]}]}]})
db.foo.find()
{ "_id" : 1, "a1" : [
 { "_a1id" : 1, "a2" : [
  { "a2id" : 1, "a3" : [
   { "a3id" : 1, "a4" : "data" }
  ] }
 ] }
] }

db.foo.update({_id:1}, {$push:{"a1.0.a2.0.a3":{a3id:2, a4:"other data"}}})
db.foo.find()
{ "_id" : 1, "a1" : [
 { "_a1id" : 1, "a2" : [
  { "a2id" : 1, "a3" : [
   { "a3id" : 1, "a4" : "data" }, 
   { "a3id" : 2, "a4" : "other data" }
  ] }
 ] }
] }

如果您不确定其中一个子文档在数组中的位置,您可以使用一个位置操作符,而Mongo将更新匹配的第一个子文档。例如:

代码语言:javascript
运行
复制
db.foo.update({_id:1, "a1.a2.a2id":1}, {$push:{"a1.0.a2.$.a3":{a3id:2, a4:"other data"}}}) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16209201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档