1

MongoDB v2.2.3の時点で、特定の基準に一致する、より大きな配列に含まれる配列にある特定のフィールドを更新する必要があるという問題があります。

次のmongodbサンプルドキュメントがあります。

{
  _id: ObjectId("50be30b64983e5100a000009"),
  user_id: 0
  occupied: {
    Greece: [
      {
        user_id: 3,
        deadline: ISODate("2013-02-08T19:19:28Z"),
        fulfilled: false
      },
      {
        user_id: 4,
        deadline: ISODate("2013-02-16T19:19:28Z"),
        fulfilled: false
      }
    ],
    Italy: [
      {
        user_id: 2,
        deadline: ISODate("2013-02-15T19:19:28Z"),
        fulfilled: false
      }
    ]
  }
}

アレイ内の国ごとにoccupied、独自のアレイのセットがあります。

私がやろうとしているのは、user_id0であるドキュメントを見つけ、配列を検索して、個々の「満たされた」フィールドをoccupied.Greece持つ要素のみを検索し、trueに変更することです。"deadline": {$gt: ISODate(current-date)}

$and演算子を試しました$elemMatchが、クエリ内の最初の配列要素の1つにしか一致しませんが、指定された条件ですべての適格な要素に一致し、同じクエリを複数回実行したり配列を処理したりせずに更新する必要がありますクライアント側。

単一のドキュメントで一般的な更新を行うためのサーバー側のソリューションはありませんか?私はPHPを使用して開発していますが、これに対する解決策は普遍的であるはずです。

4

1 に答える 1

0

恐れ入りますが、これは不可能です。ドキュメントから:

位置$演算子は、更新クエリセレクターの最初の一致のプレースホルダーとして機能することに注意してください。[私のものではないことを強調する]

これは、サーバー-1243の下のMongoDBJiraで追跡されます

jiraには、主に「仮想コレクション」というトピックの下に、かなりの数の関連する機能リクエストがあります。

于 2013-02-05T17:16:43.817 に答える