MongoDB chọn ở đâu trong mảng _id?


90

có thể trong mongo db để chọn các tài liệu của bộ sưu tập như trong SQL:

SELECT * FROM collection WHERE _id IN (1,2,3,4);

hoặc nếu tôi có một _id arraytôi phải chọn từng cái một và sau đó sắp xếp lại array/objectkết quả?

Câu trả lời:


165

Dễ dàng :)

db.collection.find( { _id : { $in : [1,2,3,4] } } );

lấy từ: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in


Chúng ta vẫn nhận được lợi ích của việc lập chỉ mục chứ? ID trong trường hợp được chuyển như dây đồng bằng ...
Rafal Pastuszak

2
Bạn làm. Tuy nhiên, độ phức tạp thời gian là tuyến tính (n), không phải logarit / hằng số. Nếu không có chỉ mục, nó sẽ là n ^ 2.
Petr Brazdil

Nó không nằm O(log(n) * m)ở đâu nlà kích thước của bộ sưu tập và msố id được chuyển qua?
Guig

8
Bạn phải sử dụng hàm ObjectId, nếu "_id" là đối tượng ID - {_id: {$ in: [ObjectId ("5a633609670aeb6f93b88b23")]}}
Pax Beach

5

danh sách là một mảng id

Trong danh sách mã này là mảng id trong bộ sưu tập người dùng

var list = ["5883d387971bb840b7399130","5883d389971bb840b7399131","5883d38a971bb840b7399132"]

    .find({ _id: {$in : list}})

4
Mã không hoạt động. Có vẻ như phải đặt ID là ObjectId ("5883d387971bb840b7399130")
Pax Beach

0

Bởi vì mongodb sử dụng bsonvà cho bson là các loại thuộc tính quan trọng. và vì _idObjectIdbạn phải sử dụng như thế này:

db.collection.find( { _id : { $in : [ObjectId('1'),ObjectId('2')] } } );

và đang được mongodb compasssử dụng như thế này:

{ "_id" : { $in : [ObjectId('1'),ObjectId('2')] } }

Lưu ý: objectId trong chuỗi có 24độ dài.


-4

Điều này không liên quan đến truy vấn mongo. Tôi đã quen thuộc với SQL và sử dụng Studio3T IDE để truy vấn cơ sở dữ liệu mongo bằng SQL. Nếu bạn cũng như tôi, tôi muốn chỉ ra rằng giá trị id cần phải được đánh máy. Vì vậy, truy vấn sẽ giống như sau:

SELECT _id from <collectionName>
WHERE _id = ObjectId("5883d387971bb840b7399130");

2
Điều này không giải quyết câu hỏi nào cả.
loctrice

Không trả lời, đã đồng ý. Nó có thể hữu ích với một số IDE như Studio3T, cho phép bạn tương tác với mongoDB bằng cách sử dụng SQL. Có câu trả lời có ứng dụng. Ngoài ra, cần nhấn mạnh rằng ngay cả trong trường hợp đó, _id vẫn phải được nhập.
sourabhxiii

1
nó về mongodb
Rohit
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.