2012-04-18 26 views
6

Tôi đang sử dụng cơ sở dữ liệu Nodejs, mongodb. Chúng ta có thể sử dụng $nin như thế này

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

trên lời cho các yếu tố normals như uname và những người khác. Nhưng đối với id đối tượng (_id), ..

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

trên đường không đưa ra lỗi, nó được thể hiện một cách chính xác ..

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

trên cũng không đưa ra lỗi ...

Vấn đề là, tôi không thể viết bằng tay như a, b, c, d ...

Tôi phải lưu trữ tất cả các a, b, c, d ... trong một số biến ở một số định dạng chính xác và phải làm như này

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

hoặc

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

Tôi cố gắng này

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 

Tôi nên làm gì? vấn đề là, tôi sẽ nhận được tất cả các mặt hàng ngoại trừ những mặt hàng đó với những mặt hàng đó với _ids.

Trả lời

9

Cách $ nin hoạt động trong mongo là phải mất một mảng giá trị để kiểm tra.

Mã: var string = a+","+b Không làm cho mảng này hợp lệ. khi bạn đang tạo chuỗi có giá trị sdfsdznfsdz, u89tgngnfdb

Vì vậy, $ nin sẽ coi mảng đó là giá trị đó chứ không phải cách bạn đang cố triển khai.

Giải pháp để làm những gì bạn muốn là tạo một mảng với các giá trị đó.

Vì vậy, một cái gì đó như:

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 } }); 
... 

Chỉ trong trường hợp bạn là một người mơ hồ chút về mảng, tôi khuyên bạn nên có một đọc về điều này:

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

+0

mã ur hoạt động, nhưng tình huống là, tôi có chuỗi str = "nfsdfnskdjnjdf", "ksjdngdfg", "gseggxfzgd" .... .Đây có thể có nhiều chuỗi bên trong chứ không phải chỉ 2. Từ đây, làm thế nào có thể tôi nhận được mảng như bạn đã nói với tôi, xin vui lòng cho tôi biết rằng một. Cảm ơn – user1305989

+0

'var str =" nfsdfnskdjnjdf, ksjdngdfg, gseggxfzgd "; var ids = str.split (","); ' // id bây giờ là một mảng từ tách, – Menztrual

+0

cảm ơn, làm việc! – user1305989

5

Không thể bình luận nào, nhưng chỉ muốn thêm ở đây rằng new ObjectID() không hoạt động đối với tôi, nhưng new ObjectId() (chữ thường d) đã hoạt động. Hy vọng điều này sẽ giúp một ai đó.

+0

Tôi đã giành được đặc quyền chỉnh sửa và nhận xét, vì vậy nhận xét này không còn phù hợp nữa, nhưng mã của câu trả lời được chấp nhận hiện đã được sao chép/có thể dán! – wolstat

Các vấn đề liên quan