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

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

我搜索了一下,但奇怪的是,我并没有在这方面找到太多。 我已经阅读了$where选项,但我想知道本机函数有多慢,如果有更好的解决方案。

即便如此,这也行不通:

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

返回什么。离开这。没有长度位的图片也可以,但当然,它也会返回空记录。


当前回答

{ $where: "this.pictures.length > 1" }

使用$where并传递this.field_name。长度,返回数组字段的大小,并通过与number比较来检查它。如果任何数组有任何值,则数组大小必须至少为1。所有数组字段的长度都大于1,这意味着数组中有一些数据

其他回答

{ $where: "this.pictures.length > 1" }

使用$where并传递this.field_name。长度,返回数组字段的大小,并通过与number比较来检查它。如果任何数组有任何值,则数组大小必须至少为1。所有数组字段的长度都大于1,这意味着数组中有一些数据

经过更多的寻找,特别是在mongodb文档中,和令人费解的片段在一起,这是答案:

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

$elemMatch匹配包含数组字段的文档,其中至少有一个元素与指定的查询匹配。

所有数组都匹配至少一个元素。

这可能对你也有用:

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

就这么简单,这招对我很管用。