MongoDB数组ElemMatch

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"));

我可以轻松地获取结果。

谢谢。

2个回答

8

MongoDB查询引擎在x为数组时,处理形式为{ x : 123 }的查询有所不同。它匹配任何包含123的x数组的文档。参见:

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

在您的情况下,查询语句为:

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

只要Keywords数组中包含“Keyword003”,它就会匹配任何文档。它可能还包含其他值,但这并不重要。

当数组是嵌入式文档的数组,并且您想针对每个嵌入式文档编写复杂测试时,才需要使用ElemMatch。


1

你尝试过像文档中的其他关键字一样查询关键字吗?驱动程序将返回包含提供的关键字的文档。

再见


我的其他查询看起来像是 var query = Query.EQ("Category", 0);,那么我该如何精确地查询关键字呢?请给我一个你所想的例子。 - Andrei Gavrila
你尝试过像 var query = Query.EQ("Keywords", "Keyword003") 这样的东西吗? - Carlo Micieli
查询确实返回了预期的结果。有什么想法为什么会这样?我觉得它能够正常工作相当令人困惑。 - Andrei Gavrila

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接