Estoy tratando de encontrar todos los documentos, que no tienen una matriz tags
o el tamaño de la matriz es menor que 2. ¿Cómo hago esto? Estoy intentando esto, pero no funciona:
db.collection.find({
'text' => { '$exists' => true }, # I need this one too
'tags' => {
'$or' => [
{ '$exists' => false },
{ '$lt' => ['$size', 2] }
]
}
})
Es Ruby, por cierto. La versión de MongoDB es 4.
Me estoy poniendo:
unknown operator: $or
3 respuestas
Puedes usar la consulta a continuación
db.collection.find({
text: { $exists: true },
$or: [{
tags: { $exists: false }
}, {
$expr: { $lt: [{ $size: '$tags' }, 2] }
}]
})
Para modificar ligeramente la respuesta de MauriRamone a una versión más pequeña:
db.getCollection('test').find({
$and:[
{"text":{$exists:true} },
{$where: "!this.tags || this.tags.length < 2"}
]
})
Sin embargo, $where
es lento y otras opciones (como el de Anthony) debería preferirse.
Su consulta original no funcionaba porque $or
solo funciona en expresiones , no en campos, y necesita un operador $expr
para el tamaño.
Intente usar $ were en su consulta, así:
db.getCollection('test').find({
$and:[
{"text":{$exists:true} },
{
$or:[
{"tags":{$exists:false}},
{$where: "this.tags.length < 2"}
]
}
]
})
Estoy usando Robomongo para probar, debe formatear la consulta a Ruby. Saludos.
Preguntas relacionadas
Nuevas preguntas
ruby
Ruby es un lenguaje interpretado dinámico orientado a objetos, multiplataforma de código abierto. La etiqueta [ruby] es para preguntas relacionadas con el lenguaje Ruby, incluida su sintaxis y sus bibliotecas. Las preguntas de Ruby on Rails deben etiquetarse con [ruby-on-rails].