2010-07-22 5 views
27

Làm thế nào tôi có thể truy vấn các sinh tố có quả táo trong đó? (bên dưới là bộ sưu tập có 3 tài liệu)Truy vấn các phần tử mảng bằng Mongo

_id => 1 
name => 'best smoothie' 
ingredients => Array 
    (
     [0] => apple 
     [1] => raspberry 
     [2] => orange 
     [3] => banana 
    ) 
_id => 2 
name => 'summer smoothie' 
ingredients => Array 
    (
     [0] => lemon 
     [1] => mint 

    ) 
_id => 3 
name => 'yogurt smoothie' 
ingredients => Array 
    (
     [0] => apple 
     [1] => blueberry 

    ) 

Trả lời

47

Nếu bạn chỉ cần chạy truy vấn dưới đây MongoDB đủ thông minh để tìm ra những gì bạn đang cố gắng làm.

{ ingredients: "apple" } 

Mongo sẽ thấy thành phần đó là danh sách và chỉ trả lại tài liệu có chứa "quả táo" ở đâu đó trong danh sách đó.

+1

cảm ơn rất nhiều, không đoán nó sẽ là R easy dễ dàng xD – Gigala

-5

Tại sao mọi người viết các ứng dụng có thể mở rộng cho sinh tố?

db.find ({"ingredients": {$ in: "apple"}});

+2

chúng tôi yêu thích chúng :) – Devrim

+5

Đó là truy vấn không hợp lệ. Giá trị $ trong phải là một mảng. Ví dụ: '' '{" thành phần ": {$ trong: [" táo "," quế "," đường "]}}' '' Sẽ kiểm tra xem trường thành phần có chứa một trong 3 giá trị được liệt kê hay không . –

-2

Từ documentation:

Lưu ý: Fields chứa mảng phù hợp với các nhà khai thác có điều kiện, nếu chỉ có một mục phù hợp.

Do đó, truy vấn sau đây:

db.collection.find({ field: { $gt:0, $lt:2 } });

sẽ phù hợp với một tài liệu có chứa các lĩnh vực sau:

{ field: [-1,3] }