MongoDB:查找所有文档,其中所有子文档在数组中匹配特定条件

时间:2017-09-29 18:30:11

标签: arrays mongodb mongoose aggregation-framework

我试图找出如何最好地找到包含名为statusHistory的数组中的子文档数组的文档,其中存在以下两种情况之一:

  1. statusHistory数组为空(无子文档)
  2. statusHistory数组只包含任意数量的子文档,其中所有子文档都有一个设置了ISO日期的deletedOn属性;换句话说,任何和所有子文档都必须有一个deletedOn;这些是“软删除”
  3. 在此示例中,查询应仅返回以下匹配单元的单元文档:

    • 200(所有子文档已删除)
    • 300(所有子文档已删除)
    • 400(statusHistory数组为空)
    • 500(statusHistory数组为空)

    在此示例中,以下文档不匹配:

    • 100(存在一个没有deletedOn的子文档)
    • 600(并非所有子文档都包含deletedOn,在这种情况下,它们都不包含)
    {
       "unit":"100",
       "statusHistory":[
          {
             "action":"Move-In",
             "deletedOn":ISODate("2017-02-08T18:27:52.938+0000")
          },
          {
             "action":"Assignment"
          }
       ]
    },
    {
       "unit":"200",
       "statusHistory":[
          {
             "action":"Move-In",
             "deletedOn":ISODate("2017-06-08T21:27:52.938+0000")
          },
          {
             "action":"Assignment"
             "deletedOn":ISODate("2017-05-08T21:27:52.938+0000")
          }
       ]
    },
    {
       "unit":"300",
       "statusHistory":[
          {
             "action":"Move-In",
             "deletedOn":ISODate("2017-06-08T21:27:52.938+0000")
          },
          {
             "action":"Assignment"
             "deletedOn":ISODate("2017-05-08T21:27:52.938+0000")
          },
          {
             "action":"Move-In",
             "deletedOn":ISODate("2017-04-08T21:27:52.938+0000")
          },
          {
             "action":"Assignment"
             "deletedOn":ISODate("2017-03-08T21:27:52.938+0000")
          }
       ]
    },
    {
       "unit":"400",
       "statusHistory":[]
    },
    {
       "unit":"500",
       "statusHistory":[]
    },
    {
       "unit":"600",
       "statusHistory":[
          {
             "action":"Move-In",
          },
          {
             "action":"Assignment"
          }
       ]
    }
    

0 个答案:

没有答案