[英]Doctrine+MongoDB - How to query for documents with array that's not empty
我想收到大小大於零的數組“贊”的所有文件。 我看到了一個使用 - > size()方法獲取特定大小的數組的示例:
$qb = $dm->createQueryBuilder('Article')->field('comments')->size(0);
但是要獲得大小不等於零的數組,是否有選項可以做到這一點?
謝謝!
您可以將特定正整數傳遞給size
,但不能使用它來查詢范圍。 這不是Doctrine的限制,而是MongoDB的限制。 $ size的文檔說:
$ size不接受值范圍。 要根據具有不同數量的元素的字段選擇文檔,請創建一個計數器字段,在向元素添加元素時將其遞增。
為此,請向Article添加$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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.