如果 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 的容器数。
我已经像这样嵌套了 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 的容器数。