Es posible comodín de la clave en una consulta? Por ejemplo, dado el siguiente registro, me gustaría hacer un .find({'a.*': 4})
Esto fue discutido aquí https://jira.mongodb.org/browse/SERVER-267 pero parece que no ha sido resuelto.

{
  'a': {
    'b': [1, 2],
    'c': [3, 4]
  }
}
  • tengo el mismo problema con mongo. tengo muchos documentos, como este: { uno: { dos: { más:datos }, también: { más:datos } } } una vez que estás a un nivel de profundidad en el árbol del documento, cada nodo en el segundo nivel es un contenedor de documentos con estructura consistente. así que me gustaría ser capaz de buscar como este: find({‘uno.*.algunos.de datos»: 5})
InformationsquelleAutor Brad | 2011-05-30

1 Comentario

  1. 11

    Tal como solicitó, esto no es posible. El problema del servidor vinculado que está todavía en «los problemas no estamos seguros de».

    MongoDB tiene algo de inteligencia que rodean el uso de matrices, y creo que eso es parte de la complejidad que rodea dicha característica.

    Tomar la siguiente consulta db.foo.find({ 'a.b' : 4 } ). Esta consulta coincidirá con los siguientes documentos.

    { a: { b: 4 } }
    { a: [ { b: 4 } ] }

    Entonces, ¿qué tiene de «comodín» hacer aquí? db.foo.find( { a.* : 4 } ) Hace coincidir con el primer documento? ¿Y el segundo?

    Por otra parte, ¿qué significa esto semánticamente? Como lo he descrito, la consulta es, efectivamente, «encontrar documentos donde cualquier campo en que el documento tiene un valor de 4». Eso es un poco inusual.

    Hay una semántica específica que usted está tratando de lograr? Tal vez un cambio en la estructura del documento que va a llegar la consulta que desee.

    • gracias, que aclara. Más específicamente, lo que estoy tratando de hacer es comodín sólo el nodo específico en la rama, es decir, cualquier subcampo de una. No estoy claro sobre cómo una.* dice ‘buscar donde cualquier campo». No es la búsqueda de documentos que tienen un campo de nivel superior ‘a’ con un subcampo que coincida con 4′?
    • Creo que la confusión aquí es de alrededor de «subcampo». Cuando escribo {a:{b:4,c:2}}, estoy diciendo que el valor a es un objeto JSON. Que un objeto JSON tiene dos claves b y c. El valor de esas llaves son 4 & 2, respectivamente. Cuando usted está pidiendo a.*, que efectivamente está pidiendo sintaxis que recorre todas las claves en las que un objeto JSON. Tu no estás pidiendo a «el bucle a través de una matriz», que está pidiendo a «el bucle a través de las propiedades de un objeto». Eso es un poco inusual, es por eso que estoy pidiendo un caso de uso específico aquí.
    • Tengo un caso de uso. myDocInMongo = {‘someUnknownKey’:{propToCheck:true}, ‘someKnownKey’:true}; Ahora, quiero encontrar a este documento utilizando el selector {someKnownKey:{$existe:true}}, pero también quiero para asegurarse de que ninguna de las otras teclas tienen un objeto con la propiedad propToCheck. Así que, como el siguiente: {‘*.propToCheck’:{$existe:false}, {someKnownKey:{$existe:true}}}

Dejar respuesta

Please enter your comment!
Please enter your name here