1

MongoDB コレクションに次のドキュメント構造があるとします。

{
  "Applications" : [{
      "JoinDate" : new Date("10/2/2013 18:06:30"),
      "Key" : "shtube",
      "Roles" : ["Administrator", "Moderator"]
    }],
  "Comment" : "Cool",
  "ConfirmationKey" : "981c69fe-6fff-47d6-bb82-3b5f1deeef25",
  "CreationDate" : new Date("8/2/2013 17:43:42"),
  ...
} 

MongoCursor の SetFields ()メソッドを使用して "Roles" フィールドだけを (パフォーマンスの問題で) 取得するにはどうすればよいですか? 現時点では、サブドキュメントの取得と「ロール」へのアクセスしか知りません。しかし、サブドキュメント全体の情報は必要ありません。

4

1 に答える 1

2

射影を使用して、(シェルを使用して) ドット表記を使用して必要なフィールドだけを抽出できます。

db.myCollection.find({ "Applications.Roles" : { $exists: true } },
             {  "Applications.Roles" : 1 })

上記の例では、Applications.Roles 構造を含むドキュメントを返すだけです。

プロジェクションの詳細については、こちらをご覧ください。

参考までに: LINQ を使用して C# からプロジェクションを効率的に行うことはできません。クライアント上でローカルにプロジェクションを行います。

もう 1 つの方法は、$elemMatch を使用することです (ただし、この場合、特定のクエリを実行していない場合、ニーズに合わない可能性があります)。

于 2013-02-10T23:02:50.093 に答える