小编典典

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

all

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

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

我已经用谷歌搜索了,但奇怪的是我没有找到太多关于这个的东西。我已经阅读了 $where 选项,但我想知道这对本机函数有多慢,以及是否有更好的解决方案。

即便如此,这也行不通:

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

什么都不返回。不this.pictures带长度位确实有效,但当然它也会返回空记录。


阅读 225

收藏
2022-03-04

共1个答案

小编典典

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

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

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

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

如果您的属性可能具有无效值(如或其他),那么您可以按照此答案的建议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,但这可能会导致意外结果:

ME.find({ pictures: { $gt: [] } })
2022-03-04