我所有的唱片都有一个名为“图片”的字段。此字段是一个字符串数组。
我现在想要这个数组不为空的最新的10条记录。
我搜索了一下,但奇怪的是,我没有找到多少关于这方面的东西。我读过$WHERE选项,但我想知道这对于本机函数来说有多慢,以及是否有更好的解决方案。
即便如此,这也行不通:
ME.find({$where: 'this.pictures.length > 0'}).sort('-created').limit(10).execFind()
不返回任何内容。不带长度位的this.pictures
确实起作用,但它当然也会返回空记录。
如果您也有没有密钥的文档,则可以使用:
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}});