当前位置: 首页 > 知识库问答 >
问题:

更新多级嵌入文档

芮祺
2023-03-14

我在mongoDB中有一个相当复杂的数据结构。文件看起来有点像这样

{ 
    "id" : 0, 
    "basket" : [
        {
            "price" : 0.9918, 
            "id" : 2500, 
            "exGroup" : [
                {
                    "exgId"  : 0, 
                    "ePrice" : 0.9918
                }
                {
                    "exgId"  : 1, 
                    "ePrice" : 0.9918
                }
            ]
        }, ]}

我想在嵌入式文档的exGroup数组中添加一个文档数组,这样每个嵌入式文档看起来都像这样

                {
                     "id"  : 0, 
                     "price" : 0.9918
                     "order"  : {
                          "id":0,
                          "exec":
                              [{
                                "quantity" : 1,
                                "price"    : 1.0
                                },
                                {
                                "quantity" : 1,
                                "price"    : 1.01
                                }
                              ]
                 }

我试着用如下的更新查询来实现这一点:

db.fund.update(
    {
        "id": 0,
        "basket.id": 2500,
        "basket.exGroup.exgId": 0,
        "basket.exGroup.order": {"$exists" : false}
    },
    {
        "$set":
        {
            "basket.exGroup.$.order" : 
             {
               "id":0,
               "exec":
                  [{
                    "quantity":1,
                    "price":0.9978
                  }]
             }
        }
    }
)

不幸的是,这给了我错误“fundId”:0,“date”:ISODate(“2016-11-21T11:00:00.000 0000”),“basket.assetId”:2500,“basket.exGroup.exgId”:0

从根本上说,我的问题是我不知道如何正确处理多级数组(即doc.array.doc.array.doc)叶子上的文档

共有1个答案

樊浩初
2023-03-14
db.rich.update(
    {
        "id": 0,
        "basket.id": 2500,
        "basket.exGroup.exgId": 0,
        "basket.exGroup.order": {"$exists" : false}
    },
    {
        "$push":
        {
            "basket.$.exGroup" : 
             {
               "id":0,
               "exec":
                  [{
                    "quantity":1,
                    "price":0.9978
                  }]
             }
        }
    }
)

这将基本上更新exGroup并推送一个新文档。然而,您需要相应地为文档建模。

 类似资料:
  • 我想在具有指定 URL 的相应文档中将嵌套的“已爬行”更新为 True。 我对mongodb相当陌生,我似乎无法弄清楚这一点,非常感谢任何帮助。

  • 问题内容: 我浏览了猫鼬API,以及关于SO和google小组的许多问题,但仍然无法弄清更新嵌入式文档。 我正在尝试使用args的内容更新此特定的userListings对象。 以下是架构: 此发现也不起作用,这可能是第一个问题: 返回: 那应该等同于此mongo客户呼叫: 运行: 问题答案: 当您已有用户时,您可以执行以下操作: 如在这里找到:http : //mongoosejs.com/do

  • 我需要使用嵌入层来编码单词向量,所以嵌入层的权重本质上是单词向量。显然,我不希望这种情况下的权重在反向传播期间被更新。我的问题是,如果按设计嵌入层已经禁止重量更新,或者我必须对此做一些特别的事情?

  • 我刚开始使用Spring data mongob,但我只是被卡住了,如何使用mongo存储库编写基于json的嵌入式文档查询。 我的数据库看起来像 我想更新基于顶级文档id的子类型,我必须更新具有id 5565ad670cf25cbd975ab2d2的子类型的首选项,如何为此编写查询?

  • null 这些操作似乎效率不高。但是这种类型的更新是无处不在的,我相信开发者已经考虑到了这一点。那么,我哪里搞错了?

  • 我有一个深度嵌套的文档结构,如下所示: 我正在尝试更新集合以插入新配置,如下所示: 我正在mongo(Python)中尝试类似的内容: 但是,我得到了“如果没有包含数组的相应查询字段,则无法应用位置运算符”错误。在mongo这样做的正确方式是什么?这是mongo v2。4.1.