Mongodb在嵌入式文档中更新和设置字段

时间:2012-09-06 18:49:04

标签: java mongodb mongodb-java mongodb-query

我有一个包含嵌入文档的集合。

 System
 {
     System_Info: "automated",

     system_type:
     {
         system_id:1,

          Tenant: [ 
                  { 
                Tenant_Id: 1, 
                Tenant_Info: "check", 
                Prop_Info: ...
                  }, 
                  { 
                 Tenant_Id: 2, 
                 Tenant_Info: "sucess", 
                  Prop_Info: ...
                  } ]
                  }}

我需要在Tenant_Id中更新并将字段Tenant_Info设置为“failed”:2

我需要使用mongodb java来做。我知道在租户数组中插入另一个租户信息。但是在这里我需要使用java代码设置字段。

有人可以帮我这么做吗?

1 个答案:

答案 0 :(得分:3)

这样的事情(未经测试):

db.coll.update(
    {
        "System.system_type.Tenant.Tenant_Id" : 2
    },
    {
        $set : {
            "System.system_type.Tenant.$.Tenant_Info" : "failed"
        }
    }, 
    false, 
    true
);

对于所有顶级文档,它应该更新集合中第一个嵌套文档,Tenant_id为2。如果您需要定位特定的顶级文档,则需要将其添加到update调用中第一个对象参数的as字段中。

Java中的等价物:

BasicDBObject find = new BasicDBObject(
    "System.system_type.Tenant.Tenant_Id", 2
);

BasicDBObject set = new BasicDBObject(
    "$set", 
    new BasicDBObject("System.system_type.Tenant.$.Tenant_Info", "failed")
);

coll.update(find, set);