如何在MongoDB文档数组中搜索字符串并在查找操作中投影数组值



我已经创建并插入了一些简单的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"] }

我将不胜感激有关查找功能以及如何使用 $ match 从数组中投影值的一些帮助......

这确实看起来像一个错误,类似于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"
  ]
}

相关内容

最新更新