我所有的记录都有一个名为“图片”的字段。该字段是一个字符串数组。
我现在想要这个数组不为空的最新 10 条记录。
我已经用谷歌搜索了,但奇怪的是我没有找到太多关于这个的东西。我已经阅读了 $where 选项,但我想知道这对本机函数有多慢,以及是否有更好的解决方案。
即便如此,这也行不通:
ME.find({$where: 'this.pictures.length > 0'}).sort('-created').limit(10).execFind()
什么都不返回。不this.pictures带长度位确实有效,但当然它也会返回空记录。
this.pictures
如果您还有没有密钥的文档,您可以使用:
ME.find({ pictures: { $exists: true, $not: {$size: 0} } })
如果涉及,MongoDB 不使用索引$size,所以这里有一个更好的解决方案:
$size
ME.find({ pictures: { $exists: true, $ne: [] } })
如果您的属性可能具有无效值(如或其他),那么您可以按照此答案的建议null``boolean添加额外的检查:$types
null``boolean
$types
使用 mongo >= 3.2:
ME.find({ pictures: { $exists: true, $type: 'array', $ne: [] } })
使用 mongo < 3.2:
ME.find({ pictures: { $exists: true, $type: 4, $ne: [] } })
自 MongoDB 2.6 版本开始,您可以与 operator进行比较$gt,但这可能会导致意外结果:
$gt
ME.find({ pictures: { $gt: [] } })