我们现在使用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()正如预期的那样,只显示static-data1,但是动态测量在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()但结果是一样的。我希望有一种方法可以消除输出中的空文档。
谢谢
发布于 2021-07-07 21:44:17
可以尝试$filter运算符,通过检查条件不等于空对象{}来过滤nested数组的结果
db.collection.aggregate([
{
$project: {
_id: 0,
data1: 1,
"nested.data8": 1
}
},
{
$set: {
nested: {
$filter: {
input: "$nested",
cond: { $ne: ["$$this", {}] }
}
}
}
}
])https://stackoverflow.com/questions/68287049
复制相似问题