【发布时间】:2014-09-05 02:16:30
【问题描述】:
> db.test.insert(
{
"seq" : "1",
"a" : [
{
"k1" : "11",
"k2" : "12"
},
{
"k1" : "21",
"k2" : "22"
}
],
"b" : {
"a" : [
{
"k1" : "11",
"k2" : "12"
},
{
"k1" : "21",
"k2" : "22"
}
]
}
}
)
> db.test.find({ "seq" : "1" }, { "a" : { $elemMatch : { "k2" : "22" } }, "a.k2" : 1 }).pretty();
{
"_id" : ObjectId("5407f3c7e40dd5ddb98ab043"),
"a" : [
{
"k2" : "22"
}
]
}
> db.test.find({ "seq" : "1" }, { "b.a" : { $elemMatch : { "k2" : "22" } }, "b.a.k2" : 1 }).pretty();
error: {
"$err" : "Can't canonicalize query: BadValue Cannot use $elemMatch projection on a nested field.",
"code" : 17287
}
请查看以上2.6.3版本的测试结果。我们实际上希望得到下面的测试结果,但是收到了一个错误查询。
{
"_id" : ObjectId("5407f3c7e40dd5ddb98ab043"),
"b" : {
"a" : [
{
"k2" : "22"
}
]
}
}
我们希望保留上述结构,希望通过 One Query 获得结果。
因此,如果我们找不到其他可用的 One Query,请告知。如果没有,那么,我们也想知道您是否愿意在将来提供带有此错误查询的解决方案。否则,我们希望有 $elemMatch(projection) 以外的替代方案。
【问题讨论】:
-
这是什么语言?你用的是什么数据库?请为问题添加适当的标签。
标签: mongodb projection