español - mongodb consulta tanto con AND como con OR
mongodb español (4)
Creo que $ y solo se admite en MongoDB v2.0 +. Me sorprende que la consola haya aceptado la expresión en primer lugar. Intentaré recrear contra un servidor 1.8 que tengo.
Verifique también la Documentación de consulta avanzada de 10Gen por $and
.
Actualizar
Ingresé sus datos de muestra en un servidor MongoDB v1.8xy v2.0x. La consulta funciona en v2.0x y falla en v1.8x. Esto confirma mis sospechas (y las de Miikka) de que el problema es con $and
y su versión de servidor.
He encontrado una solución inteligente (posiblemente) para esto en la Web here . Espero que esto ayude.
-SethO
¿Puedo usar la combinación de OR y AND en las consultas mongodb?
el siguiente código no funciona como se esperaba
db.things.find({
$and:[
{$or:[
{"first_name" : "john"},
{"last_name" : "john"}
]},
{"phone": "12345678"}
]});
contenido de la base de datos:
> db.things.find();
{ "_id" : ObjectId("4fe8734ac27bc8be56947d60"), "first_name" : "john", "last_name" : "hersh", "phone" : "2222" }
{ "_id" : ObjectId("4fe8736dc27bc8be56947d61"), "first_name" : "john", "last_name" : "hersh", "phone" : "12345678" }
{ "_id" : ObjectId("4fe8737ec27bc8be56947d62"), "first_name" : "elton", "last_name" : "john", "phone" : "12345678" }
{ "_id" : ObjectId("4fe8738ac27bc8be56947d63"), "first_name" : "eltonush", "last_name" : "john", "phone" : "5555" }
al consultar la consulta anterior - no consigo nada!
> db.things.find({$and:[{$or:[{"first_name" : "john"}, {"last_name" : "john"}]},{"phone": "12345678"}]});
>
Estoy usando mongo 1.8.3
Esto es posible de la siguiente manera (mongodb 3.4)
Aquí está el buen ejemplo.
db.getCollection(''tbl_menu_items'').find({ $and : [ { $or : [ { price : 0.99 }, { price : 1.99 } ] }, { $or : [ { sale : true }, { qty : { $lt : 20 } } ] } ] } )
Esta consulta seleccionará todos los documentos donde:
el valor del campo de precio es igual a 0,99 o 1,99, y el valor del campo de venta es igual a verdadero o el valor del campo de cantidad es inferior a 20.
Este es el ejemplo de $ y la condición con $ o la consulta, es decir, la coincidencia con cualquiera de las condiciones, por ejemplo
considerar siguiente consulta ...
db.getCollection(''tbl_menu_items'').find( { ''$or'': [ { ''$and'': [ { location: { ''$in'': [ ObjectId("588054c63879f2e767a1d553") ] } }, { is_ryward: 1 }, { points_reqiured_to_redeem_reward: { ''$lte'': 500 } } ] }, { ''$and'': [ { location: { ''$in'': [ ObjectId("588054c63879f2e767a1d553") ] } }, { is_freebie: 1 } ] } ] } )
Esta consulta seleccionará todos los documentos donde:
matriz de ubicación en 588054c63879f2e767a1d553 e is_ryward = 1 y points_reqiured_to_redeem_reward <500
O
matriz de ubicación en 588054c63879f2e767a1d553 y is_freebie
Más corto para usar una operación AND implícita:
db.things.find({
$or : [
{"first_name": "john"},
{"last_name": "john"}
],
"phone": "12345678"
})
db.things.find( {
$and : [
{
$or : [
{"first_name" : "john"},
{"last_name" : "john"}
]
},
{
"Phone":"12345678"
}
]
} )
Y toma una serie de 2 expresiones O , teléfono.
O toma una matriz de 2 expresiones first_name, last_name.
Y
O
- nombre de pila
- apellido
Número de teléfono.
Nota: Actualice a la última versión de MongoDB, si esto no funciona.