4

我有一系列文件:

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

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

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 回答