0

このようなコレクションを持っています。

      System
      {
           System_id: 100,

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

java API を使用して、tenant_id が 1 で system_id が 100 である埋め込みドキュメントを 1 つだけ削除する必要があります。

ドキュメントを削除しようとしました。しかし、ドキュメント全体が削除されています。tenant_id が 1 である埋め込みドキュメントのみを削除する必要があります。

            DBCollection collection=db.getCollection("system");
    field.put("system_id",100);
    field.put("system_type.Tenant_id", 1);
    collection.remove(field);

削除する方法を教えてください。このような出力が必要です。

            System
      {
           System_id: 100,

         system_type:
        {
             [ 
             { 
             Tenant_Id: 2, 
             Tenant_Info: "sucess", 
              Prop_Info: ...
              } ]
              }
4

2 に答える 2

3

ドキュメント全体を削除するわけではないため、次の代わりに演算子を使用updateして呼び出す必要があります。$pullremove

BasicDBObject query = new BasicDBObject(
    "System_Id", 100
);

BasicDBObject pull = new BasicDBObject(
    "$pull", new BasicDBObject(
        "system_type", new BasicDBObject(
            "Tenant_Id", 1
        )
    )
);

collection.update(query, pull);
于 2012-09-24T00:46:55.277 に答える
0

次のようなことを試してください:

 { $pull : { system_type : {Tenant_Id: 1} } }
于 2012-09-23T20:37:16.853 に答える