Mongodb Array ElemMatch

And*_*ila 4 c# mongodb

我有一组文件:

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

我想查询具有一个关键字的项目:

var query = Query.ElemMatch("Keywords", Query.EQ(XXX, "Keyword003"));
Run Code Online (Sandbox Code Playgroud)

我不知道在Query.EQ上查询什么.


通过将示例转换为:

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

并查询

var query = Query.ElemMatch("Keywords", Query.EQ("Value", "Keyword001"));
Run Code Online (Sandbox Code Playgroud)

得到结果我没有问题.

谢谢.

Rob*_*tam 8

当x是数组时,MongoDB查询引擎以不同的方式处理{x:123}形式的查询.它匹配x数组包含123的任何文档.请参阅:

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

在您的情况下,查询:

Query.EQ("Keywords", "Keyword003")
Run Code Online (Sandbox Code Playgroud)

将匹配关键字数组包含"Keyword003"的任何文档.它可能还包含其他值,但这并不重要.

仅当阵列是嵌入式文档数组并且您希望针对每个嵌入文档编写复杂测试时,才需要ElemMatch.