我有一系列文件:
"_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"));
我在获得结果方面没有问题。
谢谢。
答案 0 :(得分:8)
当x是数组时,MongoDB查询引擎会以不同的形式处理{x:123}形式的查询。它匹配x数组包含123的任何文档。请参阅:
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray
在您的情况下,查询:
Query.EQ("Keywords", "Keyword003")
将匹配关键字数组包含“Keyword003”的任何文档。它可能还包含其他值,但这并不重要。
仅当阵列是嵌入式文档数组并且您希望针对每个嵌入文档编写复杂测试时才需要ElemMatch。答案 1 :(得分:1)
您是否尝试过像文档中其他键一样查询关键字?驱动程序将返回包含提供的关键字
的文档再见