在mongodb中更新嵌套的嵌入式文档

用户名

我是mongodb的新手。请帮我。

我需要这样的文件

  employee{ 
  _id:111,
 name:xxx,
 dependents : [ {
              name:a,
              age:51,
              dep_children:[{name:aa}{name:bb}{name:c}]
              } 

              {
              name:b,
              age:52,
              dep_children:[{name:aa}{name:bb}{name:c}]
              }
              {
              name:c,
              age:51,
              dep_children:[{name:aa}{name:bb}{name:cc}]
               }
              ]
        }

我正在使用以下脚本来迁移SQL数据并将其更新到mongoDB中

我的代码看起来像这样:

    while(personcount>=0)

    {  



        BasicDBObject doc = new BasicDBObject("_id",ind1.get(count)).

                append("name",ind2.get(count));

        coll.insert(doc);

       while(dependentcount>0) 
         {


           BasicDBObject querymongo = new BasicDBObject();
                  querymongo.put( "name",ind.get(count));

                      BasicDBObject tenant = new BasicDBObject();
                  tenant.put("name",indsa.get(innercount) );
                  tenant.put("age", indsa2.get(innercount));


                  BasicDBObject update = new BasicDBObject();
                  update.put("$push", new BasicDBObject("dependents",tenant));
                     coll.update(querymongo, update,true,true);
                      while(kidcount>0)
                         {



                    BasicDBObject querymongofact = new BasicDBObject();
                    querymongokid.put(  "dependent.name",indsa.get(innercount));
                      BasicDBObject tenantkid = new BasicDBObject();
                      tenantkid .put("name",indfact.get(innercountfact) );




                      BasicDBObject updatekid = new BasicDBObject();
                      updatekid .put("$push", new BasicDBObject("dependent.dep_children",tenantkid));

                      coll.update(querymongokid, updatekid ,true,true);
                          }
         }
       }

当我们打印querymongokid和updatekid时,其中的数据本身就是期望值。此代码不会引发任何错误。但是在数据库中,唯一的dep_children数据没有得到更新。我没有得到wt出了错。请帮我

提前致谢

chk

您的上一个查询在mongo驱动程序中失败,从某种意义上说更新无效-但这不是实际错误。请让我重现您在mongo shell中所做的事情:

> db.coll.insert({_id:1,name:"name1"})
> db.coll.update({name:"name1"}, {"$push": {dependents: {name:"a", age:50}}})
> db.coll.update({name:"name1"}, {"$push": {dependents: {name:"b", age:55}}})
> db.coll.findOne()
{
        "_id" : 1,
        "dependents" : [
                {
                        "name" : "a",
                        "age" : 50
                },
                {
                        "name" : "b",
                        "age" : 55
                }
        ],
        "name" : "name1"
}
> db.coll.update({"dependents.name": "a"}, {"$push": {"dependents.dep_children": {name:"aa"}}})
can't append to array using string field name: dep_children
> db.coll.update({"dependents.name": "a"}, {"$push": {"dependents.$.dep_children": {name:"aa"}}})
> db.coll.findOne()
{
        "_id" : 1,
        "dependents" : [
                {
                        "age" : 50,
                        "dep_children" : [
                                {
                                        "name" : "aa"
                                }
                        ],
                        "name" : "a"
                },
                {
                        "name" : "b",
                        "age" : 55
                }
        ],
        "name" : "name1"
}

不幸的是,我对本机mongo java驱动程序的经验很少(我通常使用Spring数据),但是更改了您的代码行

updatekid.put("$push", new BasicDBObject("dependent.dep_children",tenantkid));

updatekid.put("$push", new BasicDBObject("dependent.$.dep_children",tenantkid));

也应该做到这一点。

该行为的原因是,“ dependent.dep_children”不是有效的选择器,因为它对应于“在依赖于子文档的字段中进入字段dep_children”。但是,“从属”恰好是一个没有任何字段的数组。$替换显式索引,并确保从查询中选择正确的子文档。

另请参见此处,以较少的错误形式编写查询-如果不使用$ elemMatch,则仅在查询唯一标识特定数组元素时才有效。使用$ elemMatch,它将始终有效,但只会更新第一个匹配项。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在mongodb中更新嵌套的嵌入式文档

来自分类Dev

在mongodb nodejs中更新双嵌套的嵌入式文档,而无需使用数字索引

来自分类Dev

在MongoDB中更新完整的嵌入式文档

来自分类Dev

查询MongoDB中的嵌入式文档

来自分类Dev

在mongodb中展开嵌入式文档

来自分类Dev

嵌入式文档中的批量更新

来自分类Dev

嵌入式文档中的批量更新

来自分类Dev

使用C#获取和添加/更新多层嵌入式/嵌套MongoDB文档

来自分类Dev

MongoDB-更新嵌入式文档和文档本身

来自分类Dev

使用Presto查询MongoDB嵌入式/嵌套文档的数组

来自分类Dev

如何从mongodb中的嵌套嵌入式文档中查询和返回单个字段?

来自分类Dev

在MongoDB文档中获取唯一的嵌入式/嵌套对象列表

来自分类Dev

MongoEngine中嵌套的嵌入式文档的验证错误

来自分类Dev

更新数组中的嵌入式文档-Mongodb +节点驱动程序

来自分类Dev

MongoDB C#驱动程序-更新嵌入式文档数组中的所有字段

来自分类Dev

从mongodb中的嵌入式文档中删除元素

来自分类Dev

如何在嵌入式数组mongodb中查询嵌入式文档

来自分类Dev

是否有任何查询通过检查mongoDb中嵌套的嵌入式文档的字段来查找文档

来自分类Dev

MongoDB $ n在嵌入式文档的某些字段中

来自分类Dev

在Mongodb中的嵌入式文档上设置索引

来自分类Dev

查询mongodb中的嵌入式文档数组

来自分类Dev

映射-Symfony2中的Mongodb嵌入式文档

来自分类Dev

通过angularjs在mongodb中插入嵌入式文档

来自分类Dev

嵌入式文档数组中的MongoDB Aggregate ObjectId

来自分类Dev

映射-Symfony2中的Mongodb嵌入式文档

来自分类Dev

使用python(pymongo)在mongodb中编辑嵌入式文档

来自分类Dev

如何在 MongoDb 中查询嵌入式文档?

来自分类Dev

更新/替换Google文档中的嵌入式图像

来自分类Dev

数组中嵌入式文档的collection更新属性

Related 相关文章

  1. 1

    在mongodb中更新嵌套的嵌入式文档

  2. 2

    在mongodb nodejs中更新双嵌套的嵌入式文档,而无需使用数字索引

  3. 3

    在MongoDB中更新完整的嵌入式文档

  4. 4

    查询MongoDB中的嵌入式文档

  5. 5

    在mongodb中展开嵌入式文档

  6. 6

    嵌入式文档中的批量更新

  7. 7

    嵌入式文档中的批量更新

  8. 8

    使用C#获取和添加/更新多层嵌入式/嵌套MongoDB文档

  9. 9

    MongoDB-更新嵌入式文档和文档本身

  10. 10

    使用Presto查询MongoDB嵌入式/嵌套文档的数组

  11. 11

    如何从mongodb中的嵌套嵌入式文档中查询和返回单个字段?

  12. 12

    在MongoDB文档中获取唯一的嵌入式/嵌套对象列表

  13. 13

    MongoEngine中嵌套的嵌入式文档的验证错误

  14. 14

    更新数组中的嵌入式文档-Mongodb +节点驱动程序

  15. 15

    MongoDB C#驱动程序-更新嵌入式文档数组中的所有字段

  16. 16

    从mongodb中的嵌入式文档中删除元素

  17. 17

    如何在嵌入式数组mongodb中查询嵌入式文档

  18. 18

    是否有任何查询通过检查mongoDb中嵌套的嵌入式文档的字段来查找文档

  19. 19

    MongoDB $ n在嵌入式文档的某些字段中

  20. 20

    在Mongodb中的嵌入式文档上设置索引

  21. 21

    查询mongodb中的嵌入式文档数组

  22. 22

    映射-Symfony2中的Mongodb嵌入式文档

  23. 23

    通过angularjs在mongodb中插入嵌入式文档

  24. 24

    嵌入式文档数组中的MongoDB Aggregate ObjectId

  25. 25

    映射-Symfony2中的Mongodb嵌入式文档

  26. 26

    使用python(pymongo)在mongodb中编辑嵌入式文档

  27. 27

    如何在 MongoDb 中查询嵌入式文档?

  28. 28

    更新/替换Google文档中的嵌入式图像

  29. 29

    数组中嵌入式文档的collection更新属性

热门标签

归档