4

私はドキュメントのコレクションを持っています:

  "_id" : ObjectId("500d1aa9cf6640c15214fc30"),
  "Title" : "Title0",
  "Description" : "Description0",
  "Keywords" : ["Keyword000", "Keyword001", "Keyword002", "Keyword003", "Keyword004", "Keyword005", "Keyword006", "Keyword007", "Keyword008", "Keyword009"],
  "Category" : 0

キーワードが1つあるアイテムをクエリしたい:

var query = Query.ElemMatch("Keywords", Query.EQ(XXX, "Keyword003"));

Query.EQで何をクエリするかわかりません。


例を次のように変換します。

"_id" : ObjectId("500d4393cf6640c152152354"),
"Title" : "Title0",
"Description" : "Description0",
"Keywords" : [{
  "Value" : "Keyword000"
}, {
  "Value" : "Keyword001"
}],
"Category" : 0

そして、

var query = Query.ElemMatch("Keywords", Query.EQ("Value", "Keyword001"));

結果を得るのに問題はありません。

ありがとうございました。

4

2 に答える 2

8

xが配列の場合、MongoDBクエリエンジンは{x:123}の形式のクエリを異なる方法で処理します。x配列に123が含まれているすべてのドキュメントに一致します。参照:

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray

あなたの場合、クエリ:

Query.EQ("Keywords", "Keyword003")

キーワード配列に「Keyword003」が含まれているすべてのドキュメントに一致します。他の値も含まれている可能性がありますが、それは問題ではありません。

ElemMatchは、配列が埋め込みドキュメントの配列であり、各埋め込みドキュメントに対して複雑なテストを作成する場合にのみ必要です。

于 2012-07-24T14:12:12.003 に答える
1

ドキュメント内の他のキーと同じようにキーワードを検索してみましたか?ドライバーは、指定されたキーワードを含むドキュメントを返します

さよなら

于 2012-07-23T11:46:26.907 に答える