0

我创建并插入了一些简单的 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 投影数组中的值...

4

1 回答 1

0

这肯定看起来像一个错误,并且类似于SERVER-9028

似乎确实有一些解决方法,因为这两种方法都有效:

db.sandbox.find({array1: 'praxis a'}, {'array1.$': 1})

或者

db.sandbox.find({array1: {$in: [/praxis a/]}}, {'array1.$': 1})

这两个产生的输出:

{
  "_id": ObjectId("5258620315b3beb195f855b8"),
  "array1": [
    "praxis a"
  ]
}
于 2013-10-12T16:55:16.367 回答