1

オブジェクトのリストを作成できるかどうかを知る必要があります。オブジェクトは日ごとに一意です。

私はこのフォーマットのコレクションを持っています:

{
  domain: "google.com"
  counters: [
    { day: "2011-08-03", metric1: 10, metric_2: 15 }
    { day: "2011-08-04", metric1: 08, metric_2: 07 }
    { day: "2011-08-05", metric1: 20, metric_2: 150 }
  ]
}

私はそのようなことを試みました:

db.test.ensureIndex({ domain: 1, 'counters.day': 1 }, { unique: true }).

upsert$pushを使用しますが、これは機能しません。

次に、upsertと$addToSetを試してまし。しかし、私はユニークなフィールドを設定することはできません。

新しいカウンターをプッシュする必要があります。その日が存在する場合は、交換する必要があります。

4

1 に答える 1

1

ルートドキュメントに対してのみ機能し、埋め込みドキュメントに対しては機能しない一意のインデックス。つまり、同じドメインとcounters.dayを持つ2つのドキュメントを挿入することはできません。countersただし、埋め込まれた重複行に挿入することはできます。

新しいカウンターをプッシュする必要があります。その日が存在する場合は、交換する必要があります。

新しい埋め込みドキュメントを挿入しようとするときは、その日のドキュメントが存在するかどうかを確認し、存在する場合は更新を行い、そうでない場合は挿入する必要があります。

于 2011-08-06T05:11:11.363 に答える