首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用find进行不含空条目的投影的MongoDb 4.x查询

使用find进行不含空条目的投影的MongoDb 4.x查询
EN

Stack Overflow用户
提问于 2021-07-07 21:32:32
回答 1查看 10关注 0票数 1

我们现在使用mongo-db来存储来自测试的数据。我使用的是Mongo-Shell文档结构是这样的:

代码语言:javascript
复制
{
   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表示相同的属性。

现在,例如,我只想显示嵌套文档的一些静态数据和一个(或几个)属性。

我使用这个查询:

代码语言:javascript
复制
find({}, {_id:0, data1:1, "nested.data8":1}).pretty()

正如预期的那样,只显示static-data1,但是动态测量在shell-output中有很多空对象

示例-输出:

代码语言:javascript
复制
{ 
  "static1" : "123", 
  "nested" : [
    {  }, 
    {  }, 
    {  }, [...] ,
    { "data8" : "OK" } 
] }

期望的输出将是:

代码语言:javascript
复制
{ 
   "static1" : "123", 
   "nested" : [
         { "data8" : "d8" } 
    ] 
}

我还在mongo shell上尝试了这个查询:

代码语言:javascript
复制
aggregate( { $addFields: {"static":"$static1", "data8":"$nested.data8"} },  { $project:{"static1":1, "nested.data8":1} } ).pretty()

但结果是一样的。我希望有一种方法可以消除输出中的空文档。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-07 21:44:17

可以尝试$filter运算符,通过检查条件不等于空对象{}来过滤nested数组的结果

代码语言:javascript
复制
db.collection.aggregate([
  {
    $project: {
      _id: 0,
      data1: 1,
      "nested.data8": 1
    }
  },
  {
    $set: {
      nested: {
        $filter: {
          input: "$nested",
          cond: { $ne: ["$$this", {}] }
        }
      }
    }
  }
])

Playground

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68287049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档