我创建并插入了一些简单的json文档,每个文档都有一个数组到mongo:
MongoDB shell version: 2.4.6
use test
> db.sandbox.insert({ "array1" : [ "praxis a", "value b", "theory c"] })
> db.sandbox.insert({ "array1" : [ "mean d", "minimum e"] })
> db.sandbox.insert({ "array1" : [ "maximum f"] })
然后我在集合中搜索包含以字符串'field1'
开头的array1值的文档> db.sandbox.find({"array1" : /praxis/})
这按预期返回了一个文档:
{ "_id" : ObjectId("52585223b8a783860470f07b"), "array1" : [ "praxis a", "value b", "theory c" ] }
但是,我真正想要的只是返回匹配的array1字段值。所以我尝试从数组中投射第一个匹配的项目:
> db.sandbox.find({"array1" : /praxis/}, {_id: 1, "array1.$": 1})
当我尝试这个时,我遇到了一个奇怪的错误:
error: {
"$err" : "positional operator (array1.$) requires corresponding field in
query specifier",
"code" : 16352
}
我希望得到的是价值:
"field1: a"
我认为我的目标是取回阵列:
{ "array1: [ "praxis a", "value b", "theory c"] }
我很感激find函数的一些帮助以及如何使用$ match ...
从数组中投影值答案 0 :(得分:0)
这确实看起来像一个错误,类似于SERVER-9028。
似乎有两种解决办法,因为这两种方法都有效:
db.sandbox.find({array1: 'praxis a'}, {'array1.$': 1})
OR
db.sandbox.find({array1: {$in: [/praxis a/]}}, {'array1.$': 1})
这两个产生的输出:
{
"_id": ObjectId("5258620315b3beb195f855b8"),
"array1": [
"praxis a"
]
}