Vous pouvez utiliser le $size operator pour interroger les tailles de tableau. Prenons l'exemple suivant l'utilisation du shell JS:
> db.foo.drop()
> db.foo.insert({_id: 1, x:[1,2]});
> db.foo.insert({_id: 2, x:[]});
> db.foo.insert({_id: 3, x:3});
> db.foo.find({x: {$size: 0}})
{ "_id" : 2, "x" : [ ] }
> db.foo.find({x: {$size: 1}})
> db.foo.find({x: {$size: 2}})
{ "_id" : 1, "x" : [ 1, 2 ] }
> db.foo.find({x: {$not: {$size: 2}}})
{ "_id" : 2, "x" : [ ] }
{ "_id" : 3, "x" : 3 }
> db.foo.find({x: {$not: {$size: 0}}})
{ "_id" : 1, "x" : [ 1, 2 ] }
{ "_id" : 3, "x" : 3 }
Je ne suis pas familier avec MongoId, mais je trouve un exemple en utilisant $size
dans this documentation. Deux avertissements avec $size
sont qu'il ne peut pas utiliser un index (d'autres parties de la requête peuvent certainement) et il ne peut pas être utilisé dans les requêtes de plage. Si cela ne vous dérange pas la comptabilité supplémentaire, une option viable est de stocker la taille de la matrice dans un champ séparé (probablement indexé) et interroger sur ce comme vous le souhaitez.
Cela fonctionne vraiment, et la bonne façon de MongoId serait: Question.where. (: Related_question_ids.not => { "$ size" => 0}) Taille – Kamilski81