英文:
How can get particular object data from double nested array in mongodb
问题
我是MongoDB新手,我只想获取ID为5689746的单个对象数据,我应该用什么方式获取?
我正在使用$elemMatch,但我没有得到预期的结果。
我希望结果如下:
{
"_id": 8965651651,
"orditems": [
{
"_id": 65748413141,
"itms": [
{
"item1": "dd",
"item2": "ee",
"item3": "ff",
"_id": 5689746
}
]
}
]
}
英文:
i m new in mongodb, i want only single object data which id is 5689746, by which way can i get this?
[
{
"_id": 8965651651,
"orditems": [
{
"_id": 65748413141,
"itms": [
{
"item1": "aa",
"item2": "bb",
"item3": "cc",
"_id": 7894567
},
{
"item1": "dd",
"item2": "ee",
"item3": "ff",
"_id": 5689746
},
{
"item1": "gg",
"item2": "hh",
"item3": "ii",
"_id": 1644824
}
]
},
{
"_id": 87448413141,
"itms": [
{
"item1": "jj",
"item2": "kk",
"item3": "ll",
"_id": 9874567
},
{
"item1": "mm",
"item2": "nn",
"item3": "oo",
"_id": 8659746
},
{
"item1": "pp",
"item2": "qq",
"item3": "rr",
"_id": 4614824
}
]
}
]
}
]
i m using $elemMatch but i didn't get result as expected
db.orders.findOne({
_id: 8965651651
},
{
orditems: {
$elemMatch: {
_id: 87448413141,
itms: {
$elemMatch: {
_id: 5689746
}
}
}
}
})
i want result like
{
"_id": 8965651651,
"orditems": [
{
"_id": 65748413141,
"itms": [
{
"item1": "dd",
"item2": "ee",
"item3": "ff",
"_id": 5689746
}
]
}
]
}
答案1
得分: 2
你需要将$filter
和$mergeObjects
连接起来,因为你在数组字段上进行了双重嵌套。
db.collection.aggregate([
{
$match: {
"_id": 8965651651
}
},
{
$set: {
orditems: {
"$filter": {
"input": "$orditems",
"as": "oi",
"cond": {
$eq: [
"$$oi._id",
65748413141
]
}
}
}
}
},
{
$set: {
orditems: {
"$map": {
"input": "$orditems",
"as": "oi",
"in": {
"$mergeObjects": [
"$$oi",
{
itms: {
"$filter": {
"input": "$$oi.itms",
"as": "i",
"cond": {
$eq: [
"$$i._id",
5689746
]
}
}
}
}
]
}
}
}
}
}
])
英文:
You need to chain up $filter
and $mergeObjects
as you are doubly nesting your array fields.
db.collection.aggregate([
{
$match: {
"_id": 8965651651
}
},
{
$set: {
orditems: {
"$filter": {
"input": "$orditems",
"as": "oi",
"cond": {
$eq: [
"$$oi._id",
65748413141
]
}
}
}
}
},
{
$set: {
orditems: {
"$map": {
"input": "$orditems",
"as": "oi",
"in": {
"$mergeObjects": [
"$$oi",
{
itms: {
"$filter": {
"input": "$$oi.itms",
"as": "i",
"cond": {
$eq: [
"$$i._id",
5689746
]
}
}
}
}
]
}
}
}
}
}
])
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论