2012-07-24 36 views
24

Tôi đã cấu trúc tài liệu sau đây:Mongo db - Truy vấn mảng lồng nhau và các đối tượng

{ 
    "_id":"12345", 
    "value":{ 
     "T":0, 
     "v":[ 
     { 
      "name":"JW", 
      "cost":100 
     } 
     ] 
    } 
} 

Làm thế nào để truy vấn chính tên? Tôi đã thử các ký hiệu dấu chấm nhưng không có may mắn (Tôi nghĩ rằng nó hoạt động chỉ hai cấp độ)

+0

Nếu bạn có cơ hội thực hiện _group by_, thì bạn cần sử dụng thao tác '$ unwind' trên khóa' value.v' trước khi bạn có thể hoạt động trên trường 'name' /' cost'. –

Trả lời

29

Nó không rõ ràng chính xác những gì bạn đã cố gắng, nhưng điều này sẽ làm việc để tìm ra doc trên bởi name:

db.collection.find({ "value.v.name": "JW" }) 

Reference

+0

Cảm ơn, tôi chắc chắn rằng nó không làm việc cho tôi, có lẽ tôi đã nhận được truy vấn sai. –

+3

Tôi không nghĩ rằng bạn có thể sử dụng toán tử dấu chấm trên một mảng. –

+1

@ SamuelO'Malley Tôi vừa cập nhật liên kết Tham chiếu tốt hơn cho thấy rằng điều này được hỗ trợ với mảng. – JohnnyHK

12

Bạn nên sử dụng $elemMatch điều hành:

db.collection.find({ 
    'value.v': { 
     $elemMatch: { 
      name: 'JW', // "name == 'JW'" 
      cost : 100 //if you need "&& cost == 100" 
     } 
    } 
}); 

Mongo docs

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