Khi bạn sử dụng các phương thức như find()
hoặc findOne()
trong MongoDB, theo mặc định, bạn nhận được toàn bộ tài liệu được trả về. Và nếu bạn sử dụng phép chiếu, bạn có thể trả về các cặp khóa / giá trị cụ thể.
Nhưng nếu bạn chỉ muốn giá trị thì sao?
Bạn có thể trích xuất giá trị của một trường bằng cách thêm tên của trường đó vào truy vấn của mình khi sử dụng findOne()
.
Ví dụ
Giả sử chúng ta có một bộ sưu tập được gọi là products
với các tài liệu sau:
{"_id":1, "product":"Bat", "size":["S", "M", "L"]} {"_id":2, "product":"Mũ" , "kích thước":["S", "L", "XL"]} {"_id":3, "sản phẩm":"Cap", "kích thước":["M", "L"]}Nếu chúng tôi muốn trả lại sản phẩm của tài liệu đầu tiên, chúng tôi có thể làm như sau:
db.products.findOne().product
Kết quả:
Con dơiLưu ý rằng chúng tôi đã sử dụng
findOne()
phương pháp. Kỹ thuật này không hoạt động trênfind()
phương pháp.findOne()
phương thức trả về một tài liệu duy nhất, trong khifind()
phương thức chỉ trả về một con trỏ đến tài liệu.Nếu chúng tôi muốn trả về mảng, chúng tôi có thể thực hiện điều này:
db.products.findOne().sizes
Kết quả:
["S", "M", "L"]Và chúng ta có thể nhận một giá trị mảng bằng cách tham chiếu chỉ mục của nó:
db.products.findOne().sizes[0]
Kết quả:
SMảng dựa trên 0 và vì vậy
0
tham chiếu đến phần tử đầu tiên trong mảng,1
tham chiếu đến phần tử thứ hai,2
thứ ba, v.v.Tài liệu cụ thể
Theo mặc định,
findOne()
phương thức trả về tài liệu đầu tiên trong bộ sưu tập. Chúng ta có thể chọn một tài liệu khác bằng cách chỉ định chuyển một truy vấn làm đối số đầu tiên.Tôi nói "đối số đầu tiên" bởi vì
findOne()
cũng chấp nhận mộtprojection
đối số như một đối số thứ hai tùy chọn.db.products.findOne({_id: 2}, {sizes: 1, _id: 0}).sizes
Kết quả:
[ "S", "L", "XL" ]
Trong trường hợp này, tôi đã thêm đối số chiếu, nhưng nó không ảnh hưởng đến kết quả. Nhưng nó sẽ có hiệu lực nếu tôi chỉ định giá trị bằng 0. Điều đó sẽ dẫn đến không có gì được trả lại.
Tài liệu được nhúng
Bạn có thể sử dụng ký hiệu dấu chấm để trả về giá trị từ các tài liệu được nhúng
Tài liệu mẫu:
{"_id":1, "name":"Wag", "details":{"type":"Dog", "weight":20}}Chúng tôi có thể làm như sau để trả về một giá trị từ tài liệu được nhúng:
db.pets.findOne().details.type
Kết quả:
Con chó