0

配列にさらに値を追加したいのですが、そのためには 2 つの値が一致する必要があります。1 つの値で動作しますが、2 つの値では動作しません。これは私が持っているものです:

    { "_id" : ObjectId( "50f1a05d00bf6832b03a01cb" ),
  "app" : "494258956",
  "keywords" : [ 
    { "data" : [ 
        { "device" : "software",
          "date" : Date( 1358012509633 ),
          "rank" : 1,
          "shop" : "143443" } ],
      "keyword" : "test" } ] }

キーワード「test」とアプリ「494258956」の新しい「データ」がある場合、新しいセットを「データ」に追加すると、次のようになります。

    { "_id" : ObjectId( "50f1a05d00bf6832b03a01cb" ),
  "app" : "494258956",
  "keywords" : [ 
    { "data" : [ 
        { "device" : "software",
          "date" : Date( 1358012509633 ),
          "rank" : 1,
          "shop" : "143443" }
 , { "device" : "software",
          "date" : Date( 1358012599633 ),
          "rank" : 2,
          "shop" : "143443" }],
      "keyword" : "test" } ] }

前もって感謝します。

4

2 に答える 2

0

これはあなたが求めていることをしているようです(JavaScript構文):

    coll.update({
        "app": "494258956", 
        "keywords": {
            "$elemMatch": { "keyword": "test" }
        }
    },
    {
        "$push": {
            "keywords.$.data": {
                "device" : "software",
                "date" : new Date( 1358012599633 ),
                "rank" : 2,
                "shop" : "143443" 
            }
        }
    }
于 2013-01-13T06:46:20.690 に答える
0

現在、これはサポートされて$いません。これは、位置演算子が現在 upsert で機能しないためです。SERVER-3326に投票してください

回避策として、スキーマの設計を見直したり、アップサートを使用しない複数の操作を行ったり、更新されたアイテムの数を調べたりすることが考えられます。競合状態にならないように注意する必要があります。例:

  1. どこで更新を行います{keywords: {$exists: true}}
  2. update が 0 を返す場合 - アップサートを実行するキーワードがない場合:{keywords: {$exists: false}}
  3. update が 0 を返す場合 - 競争があり、誰かが追加したキーワードがステップ 1 を実行できるようになりました。
于 2013-01-30T11:23:58.020 に答える