提问者:小点点

查找数组字段不为空的MongoDB记录


我所有的唱片都有一个名为“图片”的字段。此字段是一个字符串数组。

我现在想要这个数组不为空的最新的10条记录。

我搜索了一下,但奇怪的是,我没有找到多少关于这方面的东西。我读过$WHERE选项,但我想知道这对于本机函数来说有多慢,以及是否有更好的解决方案。

即便如此,这也行不通:

ME.find({$where: 'this.pictures.length > 0'}).sort('-created').limit(10).execFind()

不返回任何内容。不带长度位的this.pictures确实起作用,但它当然也会返回空记录。


共3个答案

匿名用户

如果您也有没有密钥的文档,则可以使用:

ME.find({ pictures: { $exists: true, $not: {$size: 0} } })

如果涉及$size,MongoDB不使用索引,因此这里有一个更好的解决方案:

ME.find({ pictures: { $exists: true, $ne: [] } })

自从MongoDB2.6发行版以来,您可以与操作符$>进行比较,但可能会导致意外的结果(您可以在此答案中找到详细的解释):

ME.find({ pictures: { $gt: [] } })

匿名用户

经过更多的查找,特别是在mongodb文档中,以及一些令人费解的地方,答案如下:

ME.find({pictures: {$exists: true, $not: {$size: 0}}})

匿名用户

这可能也适用于您:

ME.find({'pictures.0': {$exists: true}});