2

Gurus-ドキュメント「surname」が埋め込まれている次のコレクション「spouse」からクエリを実行して、このドキュメントの「surname」との同等性を確認する方法がわからない状況で立ち往生しています。

{
  "_id" : ObjectId("50bd2bb4fcfc6066b7ef090d"),
  "name" : "Gwendolyn",
  "surname" : "Davis",
  "birthyear" : 1978,
  "spouse" : {
    "name" : "Dennis",
    "surname" : "Evans",
    "birthyear" : 1969
  },  

クエリする必要があります:

同じ名前のすべての配偶者のデータを出力します(一方の配偶者の名前が指定されていない場合は、別の名前と一致すると想定します)

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

db.task.find({"surname":{"spouse.surname":1}})

しかし失敗しました)

この例/サンプルをどのように達成できるかを教えてください。これに基づいて本当に役立ちます:-)

どうもありがとう!

4

1 に答える 1

2

3 つのオプションがあります。

  1. 使用$where修飾子:

    db.task.find({$where: 'this.spouse.surname === this.surname'})

  2. すべてのドキュメントを更新し、特別なフラグを追加します。その後、このフラグでドキュメントをクエリできるようになります。より高速$whereですが、データを変更する必要があります。

  3. MapReduceを使用します。かなり複雑ですが、ほとんど何でもできます。

于 2012-12-19T14:13:46.557 に答える