MongoDb 4.x 使用 find 查询没有空条目的投影
MongoDb 4.x Query with projection without empty entries using find
我们现在使用 mongo-db 来存储来自测试的数据。我正在使用 Mongo-Shell
文件结构如下:
{
static1:"abc",
static2:"xyz",
static3:"asd", [...],
nested:[
{
data1: "d1",
data2: "d2",
},
{
data1: "dx",
data4: "d4",
data5: "d5",
data6: "d6",
},
{
data1: "ds",
data8:"data8"
}, [...]
]
}
所以静态数据总是在相同的结构中,但对于每次测量,对象看起来可能不同。它可以是具有上限值、下限值和实际值的电压。或者只是比较目标值和实际值。高度动态。
相同的 data1-name 代表相同的属性。
现在,例如我只想显示嵌套文档的一些静态数据和一个(或多个)属性。
我正在使用这个查询:
find({}, {_id:0, data1:1, "nested.data8":1}).pretty()
正如预期的那样,只显示了静态数据 1,但是动态测量在 shell-output
中有很多空对象
示例输出:
{
"static1" : "123",
"nested" : [
{ },
{ },
{ }, [...] ,
{ "data8" : "OK" }
] }
所需的输出将是:
{
"static1" : "123",
"nested" : [
{ "data8" : "d8" }
]
}
我也在 mongo shell:
上试过这个查询
aggregate( { $addFields: {"static":"$static1", "data8":"$nested.data8"} }, { $project:{"static1":1, "nested.data8":1} } ).pretty()
但是结果是一样的。
我希望有办法摆脱输出中的空文档。
谢谢
您可以尝试 $filter
运算符通过检查条件不等于空对象 {}
来过滤 nested
数组的结果
db.collection.aggregate([
{
$project: {
_id: 0,
data1: 1,
"nested.data8": 1
}
},
{
$set: {
nested: {
$filter: {
input: "$nested",
cond: { $ne: ["$$this", {}] }
}
}
}
}
])
我们现在使用 mongo-db 来存储来自测试的数据。我正在使用 Mongo-Shell 文件结构如下:
{
static1:"abc",
static2:"xyz",
static3:"asd", [...],
nested:[
{
data1: "d1",
data2: "d2",
},
{
data1: "dx",
data4: "d4",
data5: "d5",
data6: "d6",
},
{
data1: "ds",
data8:"data8"
}, [...]
]
}
所以静态数据总是在相同的结构中,但对于每次测量,对象看起来可能不同。它可以是具有上限值、下限值和实际值的电压。或者只是比较目标值和实际值。高度动态。 相同的 data1-name 代表相同的属性。
现在,例如我只想显示嵌套文档的一些静态数据和一个(或多个)属性。
我正在使用这个查询:
find({}, {_id:0, data1:1, "nested.data8":1}).pretty()
正如预期的那样,只显示了静态数据 1,但是动态测量在 shell-output
中有很多空对象示例输出:
{
"static1" : "123",
"nested" : [
{ },
{ },
{ }, [...] ,
{ "data8" : "OK" }
] }
所需的输出将是:
{
"static1" : "123",
"nested" : [
{ "data8" : "d8" }
]
}
我也在 mongo shell:
上试过这个查询aggregate( { $addFields: {"static":"$static1", "data8":"$nested.data8"} }, { $project:{"static1":1, "nested.data8":1} } ).pretty()
但是结果是一样的。 我希望有办法摆脱输出中的空文档。
谢谢
您可以尝试 $filter
运算符通过检查条件不等于空对象 {}
nested
数组的结果
db.collection.aggregate([
{
$project: {
_id: 0,
data1: 1,
"nested.data8": 1
}
},
{
$set: {
nested: {
$filter: {
input: "$nested",
cond: { $ne: ["$$this", {}] }
}
}
}
}
])