2011-12-27 13 views
5

Tengo una colección como esta:

user_id  albums 
1   [1 2 3 4] 
2   [3 5 7 8] 

Quiero averiguar todos los registros que, con los álbumes contienen 3 o 7 o 8, que escribió el código como este, pero no funciona:

or_array = [] 
or_array.append({"albums":3}) 
or_array.append({"albums":7}) 
or_array.append({"albums":8}) 

collection1.find({"$or":or_array}) 

¿Cuál es la forma correcta de hacerlo?

+1

Hmm, parece que lo que está haciendo [* debería * trabajo] (http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray) ... – Cameron

Respuesta

7

probar esto

collection1.find({'albums': {'$in': [3, 7, 8]}}) 

de los documentos mongodb, [IN] allow[s] you to specify an array of possible matches

Si eso no funciona, tal vez de vuelta de pista y un vistazo a los tipos reales de 37 y 8 en la colección para asegurarse de que son ints.

print type(collection1.find_one()['albums'][0]) 
+0

curioso de saber si esto funciona ... y si lo hace, ¿por qué el método OP no funciona? – Cameron

+0

Supongo que no funciona/no debería funcionar (si lo anterior no) pero probablemente lo llevará por el camino para descubrir por qué :) Si funciona, ¡me encantaría saber el diff también! – dskinner

Cuestiones relacionadas