我想接收大小大于零的数组“喜欢”的所有文档。我看到了一个使用 ->size() 方法获取特定大小的数组的示例:
$qb = $dm->createQueryBuilder('Article')->field('comments')->size(0);
但不要得到一个大小不为零的数组,有没有办法做到这一点?
谢谢!
我想接收大小大于零的数组“喜欢”的所有文档。我看到了一个使用 ->size() 方法获取特定大小的数组的示例:
$qb = $dm->createQueryBuilder('Article')->field('comments')->size(0);
但不要得到一个大小不为零的数组,有没有办法做到这一点?
谢谢!
您可以将特定的正整数传递给size
,但不能使用它来查询范围。这不是 Doctrine 的限制,而是 MongoDB 的限制。$size上的文档说:
$size 不接受值范围。要根据具有不同数量元素的字段选择文档,请创建一个计数器字段,当您将元素添加到字段时会增加该字段。
为此,请$comments_count
@Int
向文章添加一个字段并更新它 a) 在修改的文档方法中$comments
或 b) 在带有注释的文档方法中@PreUpdate
。
另一个(低效)选项是使用where
javascript 表达式:
$where = "function() { return this.comments && this.comments.length > 0; }";
$qb = $dm->createQueryBuilder('Article')->field('comments')->where($where);
为此使用 JavaScript 真的很慢。您应该更喜欢“纯”QueryBuilder:
$qb = $dm->createQueryBuilder('Article');
$qb = $qb->field('comments')
->exists(true)
->not($qb->expr()->size(0));