2013-04-22 47 views
9

Hãy xem xét các tài liệu sau đây:

{ 
    "_id" : "ID_01", 
    "code" : ["001", "002", "003"], 
    "Others" : "544554" 
} 

tôi đã đi qua này MongoDB doc for elemmatch-query & elemmatch-projection, nhưng không thể tìm ra cách sử dụng tương tự cho các tài liệu trên.

Có thể cho tôi biết làm cách nào để sử dụng $elemMatch cho mã trường?

+1

là '$ in' thực sự những gì bạn đang tìm kiếm? [docs] (http://docs.mongodb.org/manual/reference/operator/in/) – WiredPrairie

+1

Ví dụ về truy vấn hiện tại của bạn và kết quả bạn đang cố gắng đạt được sẽ rất hữu ích. Có vẻ như bạn muốn truy vấn '$ in'. – Stennie

+0

@WiredPrairie: có chính xác ... nhờ nó hoạt động .. –

Trả lời

8

Bạn sẽ muốn sử dụng toán tử $in thay vì $elemMatch trong trường hợp này là $in có thể được sử dụng để tìm kiếm giá trị (hoặc giá trị) bên trong một trường cụ thể. $ in yêu cầu danh sách các giá trị được chuyển thành mảng. Ngoài ra, và đối với trường hợp của bạn, nó sẽ tìm thấy một giá trị đơn lẻ, hoặc bằng cách tìm kiếm trong một mảng các giá trị. Toàn bộ tài liệu phù hợp được trả về.

Ví dụ, bạn có thể sử dụng nó như thế này:

db.mycodes.find({ code: { $in: ["001"] } }) 

Mà có thể được đơn giản hóa để chỉ là:

db.mycodes.find({ code: "001" }) 

Như MongoDB sẽ xem xét trong một mảng cho một trận đấu duy nhất như trên ("001").

Hoặc nếu bạn muốn tìm kiếm "001" hoặc "002":

db.mycodes.find({ code: { $in: ["001", "002"] } }) 

$in documentation

+0

$ chỉ mất mảng: "Không thể chuẩn hóa truy vấn: BadValue $ cần một mảng" –

+0

@RaxWunter - chính xác. Không chắc tại sao tôi lại làm như vậy vì tôi đã xác nhận nó hoạt động theo cách 2.6. Cảm ơn! (Đây là từ tháng 4 năm 2013 để có thể thay đổi điều gì đó trong bảng điều khiển hoặc DB ... không chắc chắn điều gì đang xảy ra :)) – WiredPrairie

2

Nếu bạn chỉ đơn giản là tìm cách để phù hợp với tất cả các tài liệu với một mảng chứa một giá trị nhất định, bạn chỉ có thể xác định giá trị trên tham chiếu đến mảng đó, ví dụ

db.mycodes.find({ code: '001' }) 

nào do đó sẽ trả lại cho bạn tất cả các tài liệu có chứa '001' trong code mảng của họ

+0

Đúng vậy! Cảm ơn. – thomas