我所有的记录都有一个名为"图片"的字段.此字段是字符串array.

我现在想要最新的10条记录,其中数组不是空的.

我在谷歌上搜索过,但奇怪的是,我没有在这方面找到多少.

即便如此,这也行不通:

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: [] } })

如果您的属性可能有无效值(如null boolean或其他),则您可以添加一个额外的复选框using $types,如建议的in this answer:

使用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进行比较,但这可能会导致意外的结果(您可以找到详细的解释in this answer):

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

Mongodb相关问答推荐

数组相等条件返回的文档多于与相等匹配的文档:MongoDB

为什么我的Mongoose更新找不到匹配?

为什么数组长度0被认为是Mongoose中排序中最大的数字

构造函数的参数 0 需要错误类型的 bean

如何判断 MongoDB 的两个数组中是否存在值?

从 MongoDB 中的聚合结果中获取不同的值

如何聚合过滤器嵌套文档并从其他字段中获取值

MongoDB - 文档中多个数组大小的总和

MongoID find 或 find_by

mongodb上不区分大小写的查询

.NET 4 中是否有 mongodb C# 驱动程序支持 System.Dynamic.DynamicObject?

为什么不建议在 MongoDB 中使用服务器端存储函数?

Mongoose:填充填充字段

我如何使用 Twitter 的流 api 中的推文并将它们存储在 mongodb 中

mongodb类型更改为数组

使用自定义 _id 值时 mongodb 中的 Upserts

单个语句中的多个 mongo 更新运算符?

验证 MongoCredential 的异常和未分类的 Mongo Db 异常

show dbs 给出Not Authorized to execute command错误

如何从集合中删除除 MongoDB 中的文档之外的所有文档