2012-04-18 18 views
6

Estoy usando Nodejs, mongodb base de datos. Podemos utilizar $nin como esto

Model.find({ uname : { $nin : ["sachin","saurav"] } }.... 

por encima de las palabras para los elementos Normales como uname y otros. Pero para los identificadores de los objetos (_id), ..

Model.find({_id : {$nin : ["6534767457dfgbyb23","wtvwt3wy5etvdh"] } } ... 

encima de la línea no da error, se muestra correctamente ..

var ObjectID = require('mongodb').ObjectID; 
var a = new ObjectID("sdfsdznfsdz"); 
var b=new ObjectID("sdfjwneufhq2rfwefsd"); 
Model.find({_id : { $nin : [a,b] } }... 

anterior tampoco da un error ...

El problema es, no puedo escribir manualmente como a, b, c, d ...

Tengo que almacenar todos los a, b, c, d ... en alguna variable en algún formato correcto, y tengo que hacer como esto

Model.find({_id : {$nin : variable } } 

o

Model.find({_id : {$nin : [variable] } } 

yo probamos este

var string = a+","+b //this didnt work, error : invalid object id 
var string = "nfw34qfhrs9"+","+"u89tgngnfdb" //this also same error 
var string = "\"jn4tr43r\"" + "," + "\"ansfuw37fe\"" //this also same error 

¿Qué debo hacer? el caso es que debería obtener todos los artículos, excepto aquellos con esos _ids.

Respuesta

9

La forma en que $ nin funciona en mongo es que se necesita una serie de valores para verificar.

El código: var string = a+","+b No lo hace una matriz válida. como está creando una cadena con el valor sdfsdznfsdz, u89tgngnfdb

Así que $ nin está tratando la matriz como ese valor, no de la manera que está tratando de implementar.

La solución para hacer lo que desee es crear una matriz con esos valores.

Así que algo como:

var ids = new Array(new ObjectId("1124edcef241"), new ObjectId("56943decfeca845")); 

// Dont put [ ] as a parameter. Just send a variable thats an array  
Model.find({_id : { $nin : ids } }); 
... 

Sólo en caso que eres un poco nebuloso respecto a las matrices, que sugieren tener una lectura de esta:

http://www.w3schools.com/js/js_obj_array.asp

+0

código de ur trabajando, pero la situación es que tengo una cadena str = "nfsdfnskdjnjdf", "ksjdngdfg", "gseggxfzgd" ..... Esto puede tener muchas cadenas internas, no solo 2. A partir de esto, ¿cómo puede Obtengo la matriz como me dijiste, por favor dime esa. Gracias – user1305989

+0

'var str =" nfsdfnskdjnjdf, ksjdngdfg, gseggxfzgd "; var ids = str.split (","); ' // ids ahora es una matriz de la división, – Menztrual

+0

gracias, trabajando! – user1305989

5
No

poder comentar todavía, pero solo quería agregar aquí que new ObjectID() no funcionaba para mí, pero new ObjectId() (minúscula d) funcionó. Espero que esto ayude a alguien.

+0

Me he ganado el privilegio de editar y comentar, por lo que este comentario ya no es relevante, ¡pero el código de la respuesta aceptada ahora es de copiar/pegar! – wolstat

Cuestiones relacionadas