1

$addToSet を使用して既存のサブドキュメントを更新できますか? もしそうなら、「oid」と「インスタンス」が同じで、「値」フィールドが更新されるべきものである場合に一致することをMongoDbに伝えるにはどうすればよいですか。

ありがとう

{ $addToSet : { "data" : { $each : [
 {"oid" : "1.3.6.1.4.1.111.3.10.9.9.88",
      "instance" : "0",
      "value" : "8888"}

{"oid" : "1.3.6.1.4.1.111.3.10.9.9.77",
      "instance" : "0",
      "value" : "88888888"}

 ] } } }



"_id" : 483,
  "data" : [{
      "oid" : "1.3.6.1.4.1.111.3.10.2.5.35.3",
      "instance" : "0",
      "value" : "0"
    }, {
      "oid" : "1.3.6.1.4.1.111.3.999.2.5.2",
      "instance" : "0",
      "value" : "RFCluster"
    }, {
      "oid" : "1.3.6.1.4.1.111.3.30.5.1.1",
      "instance" : "0",
      "value" : null
    }]}
4

1 に答える 1

0

$addToSet を使用して特定のサブドキュメントのみを更新することはできません。各「データ」要素が独自のドキュメントになるようにスキーマを変更し、次のように ID を data_id に移動する必要があると思います。

{
  "data_id": 483,
  "oid" : "1.3.6.1.4.1.111.3.10.2.5.35.3",
  "instance" : "0",
  "value" : "0"
}

次に、 upsertのようなものを非常に簡単に使用して、1 つの値だけを更新できます。

db.colname.update(
    { "data_id" 483, "oid" : "1.3.6.1.4.1.111.3.10.2.5.35.3", "instance" : "0" }, // criteria
    { $set: { 'value' : "new value" } }, // update spec
    true // this is to enable "upsert"
);
于 2012-05-22T10:38:57.217 に答える