> 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"
}
]
}
}
我们希望保留上述结构,并希望通过一个查询获得结果。因此,请告知是否有其他可用的单一查询。如果没有,我们也想知道您是否愿意在未来提供解决这个错误查询的解决方案。否则,我们希望有除了$elemMatch(projection)之外的其他选择。