我有以下型別的檔案:
[
{
"_id": ObjectId("5c05984246a0201286d4b57a"),
f: "x",
"_a": [
{
"_onlineStore": {}
},
{
"_p": {
"s": {
"a": {
"t": [
{
id: 1,
"dateP": "20200-09-20",
did: "x",
dst: "y",
den: "z"
},
{
id: 2,
"dateP": "20200-09-20"
}
]
},
"c": {
"t": [
{
id: 3,
"dateP": "20300-09-22",
},
{
id: 4,
"dateP": "20300-09-23",
did: "x",
dst: "y",
den: "z"
},
{
id: 5,
"dateP": "20300-09-23",
}
]
}
}
}
}
]
}
]
我需要找到洗掉所有沒有“did”、“dst”和“den”欄位的檔案的更新查詢,在上面的檔案嵌套陣列中是具有 id:[2,3,5] 的子物件,在真正的收藏中,我不知道 id,是否可以選擇一次全部洗掉?
我的游樂場嘗試,但沒有成功
更新后的檔案需要如下所示:
[
{
"_id": ObjectId("5c05984246a0201286d4b57a"),
f: "x",
"_a": [
{
"_onlineStore": {}
},
{
"_p": {
"s": {
"a": {
"t": [
{
id: 1,
"dateP": "20200-09-20",
did: "x",
dst: "y",
den: "z"
}
]
},
"c": {
"t": [
{
id: 4,
"dateP": "20300-09-23",
did: "x",
dst: "y",
den: "z"
}
]
}
}
}
}
]
}
]
uj5u.com熱心網友回復:
這是你想要的嗎?:
db.collection.update(
{},
[
{
$set: {
"_a": {
$map: {
input: "$_a",
as: "external",
in: {
$cond: [
{
$gt: [
"$$external._p",
0
]
},
{
_p: {
s: {
a: {
t: {
$filter: {
input: "$$external._p.s.a.t",
as: "item",
cond: {
$and: [
{
$gt: [
"$$item.did",
0
]
},
{
$gt: [
"$$item.dst",
0
]
},
{
$gt: [
"$$item.den",
0
]
}
]
}
}
}
}
},
c: {
t: {
$filter: {
input: "$$external._p.s.c.t",
as: "item",
cond: {
$and: [
{
$gt: [
"$$item.did",
0
]
},
{
$gt: [
"$$item.dst",
0
]
},
{
$gt: [
"$$item.den",
0
]
}
]
}
}
}
}
}
},
"$$external"
]
}
}
}
}
}
],
{multi:true})
看看它在操場上的例子是如何作業的
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/527087.html
上一篇:更新mongo檔案中的嵌套陣列
