Mongo - 空双嵌套数组的计数

时间:2016-09-26 00:40:27

标签: mongodb mongoose mongoose-schema mongotemplate

说我有这个结构

{
    "_id" : "4klhrj5hZ",
    "name" : "asdf",
    "startTime" : ISODate("2016-09-20T22:22:08.082Z"),
    "columns" : [
        {
            "_id" : ObjectId("57e1b69087ceb4392ebdf7f4"),
            "createdAt" : ISODate("2016-09-20T22:22:08.088Z"),
            "rows" : [
                {
                    "value" : "adf",
                    "_id" : ObjectId("57e1b7867598bd39a72876ef")
                }
            ]
        },
        {
            "_id" : ObjectId("57e1b69087ceb4392ebdf7f3"),
            "createdAt" : ISODate("2016-09-20T22:22:08.088Z"),
            "rows" : [
                {
                    "value" : "we",
                    "_id" : ObjectId("57e1b69287ceb4392ebdf7f5"),
            ]
        },
        {
            "_id" : ObjectId("57e1b69087ceb4392ebdf7f2"),
            "createdAt" : ISODate("2016-09-20T22:22:08.086Z"),
            "rows" : [
                {
                    "value" : "asdf",
                    "_id" : ObjectId("57e1b7be7598bd39a72876f0")
                }
            ]
        }
    ]
}

我首先有一个列数组,然后是每列的行数组。一个数组数组......我正在尝试编写一个计数查询,告诉我有多少顶级文档包含 ALL 空数组。因此,在此示例中,columns[0-2].rows.length === 0,而不是列可以是任何长度。从我见过的例子中最让我沮丧的是,动态地执行嵌套数组而不是像

那样引用它。

columns.0.rows

谢谢!

编辑:澄清 这是帮助澄清的猫鼬模式

var RowSchema = new Schema({
  value: String,
  createdAt:{
    type: Date,
    'default': Date.now
  }
});

var ColumnSchema = new Schema({
  rows: [RowSchema],
  createdAt:{
    type: Date,
    'default': Date.now
  }
});

var ItemSchema = new Schema({
  _id: {
    type: String,
    unique: true,
    'default': shortid.generate
  },
  name: String,
  columns: [ColumnSchema],
  createdAt:{
    type: Date,
    'default': Date.now
  }
})

我想运行查询以查找所有列中包含零行的所有Item。所以我知道如何找到一个空的数组:

Item.find({ columns: { $exists: true, $eq: [] } })

但我想要像

这样的东西
Item.find({ 'columns.rows': { $exists: true, $eq: [] } })

对于不清楚的解释感到抱歉,只是如此包裹它有时你会忘记设置正确的上下文。感谢。

0 个答案:

没有答案