如果 MongoDB 中的条件用于嵌套 JSON 以检索特定值

If condition in MongoDB for Nested JSON to retrieve a particular value

我已经像这样嵌套了 JSON。我想在第二级检索“_value”的值。 IE。 "Living Organisms" 这是我的 JSON 文档。

{ "name": "Biology Book", "data": { "toc": { "_version": "1", "ge": [ { "_name": "The Fundamental Unit of Life", "_id": "5a", "ge": [ { "_value": "Living Organisms", "_id": "5b" } ] } ] } } }

这是我试过的,使用“_id”,我想检索它的“_value”

db.products.aggregate([{"$match":{ "data.toc.ge.ge._id": "5b"}}])

如果我没看错你的问题,你只关心_value,所以听起来你可能想使用投影:

db.products.aggregate([{"$match":{ "data.toc.ge.ge._id": "5b"}}, { "$project": {"data.toc.ge.ge._value": 1}}])

这是我能得到的最接近您在上面评论中提到的输出的结果。希望对你有帮助。

db.collection.aggregate([
  {
    $match: {
      "data.toc.ge.ge._id": "5b"
    }
  },
  {
    $unwind: "$data.toc.ge"
  },
  {
    $unwind: "$data.toc.ge.ge"
  },
  {
    $group: {
      _id: null,
      book: {
        $push: "$data.toc.ge.ge._value"
      }
    }
  },
  {
    $project: {
      _id: 0,
      first: {
        $arrayElemAt: [
          "$book",
          0
        ]
      },

    }
  }
])

输出:

[
  {
    "first": "Living Organisms"
  }
]

你可以看看我试过什么here

如果您使用的是 Mongoid:

(1..6).inject(Model.where('data.toc.ge.ge._id' => '5b').pluck('data.toc.ge.ge._value').first) { |v| v.values.first rescue v.first rescue v }
# => "Living Organisms"

6 是从输出(4 个哈希和 2 个数组)到 trim 的容器数。