如果 MongoDB 中的条件用于嵌套 JSON 以检索特定值
Posted
技术标签:
【中文标题】如果 MongoDB 中的条件用于嵌套 JSON 以检索特定值【英文标题】:If condition in MongoDB for Nested JSON to retrieve a particular value 【发布时间】:2020-03-21 14:35:33 【问题描述】:我已经像这样嵌套了 JSON。我想在第二级检索“_value”的值。 IE。 “活的有机体”这是我的 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"])
【问题讨论】:
您在问题中提到的查询工作正常。您面临的问题是什么? @hushie 输出应为 ["Living Organisms"] 【参考方案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
【讨论】:
@hussie 你为什么使用聚合?我们不能用'find'吗? @G.Brown 要获得您要求的结果,我必须使用聚合,这允许我使用$project
, $unwind`。否则不能与 find 一起使用。【参考方案2】:
如果您使用的是 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 个数组)。
【讨论】:
【参考方案3】:如果我正确理解你的问题,你只关心_value
,所以听起来你可能想要使用投影:
db.products.aggregate(["$match": "data.toc.ge.ge._id": "5b", "$project": "data.toc.ge.ge._value": 1])
【讨论】:
以上是关于如果 MongoDB 中的条件用于嵌套 JSON 以检索特定值的主要内容,如果未能解决你的问题,请参考以下文章
Mongodb多层嵌套数组如何精确查询(内容处为格式化的json截图,评论里面是json的内容)?