MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB find ()

Trong MongoDB, db.collection.find() phương pháp chọn tài liệu trong một bộ sưu tập hoặc chế độ xem và trả về một con trỏ đến các tài liệu đã chọn ..

Bộ sưu tập collection một phần là tên của bộ sưu tập hoặc chế độ xem cần tìm kiếm.

Bạn có thể sử dụng nó để trả lại tất cả tài liệu, chỉ một số hoặc chỉ một tài liệu. Bạn cũng có thể chỉ định trường nào sẽ được trả về.

Điều quan trọng cần lưu ý là nó không thực sự trả lại tài liệu. Nó chỉ trả về một con trỏ vào các tài liệu. Nói như vậy, sẽ dễ dàng hơn khi nói rằng nó “trả lại tài liệu” và nó thường được gọi theo cách như vậy - bao gồm cả trong bài viết này 🙂

Trả lại tất cả tài liệu

Đây là một ví dụ để chứng minh.

 db.pets.find() 

Kết quả:

 {"_id":1, "name":"Wag", "type":"Dog", "weight":20} {"_id":2, "name":"Bark", "type" :"Dog", "weight":10} {"_id":3, "name":"Meo meo", "type":"Cat", "weight":7} {"_id":4, "name" :"Scratch", "type":"Cat", "weight":8} {"_id":5, "name":"Bruce", "type":"Bat", "weight":3}  

Ở đây, chúng tôi sử dụng find() phương thức để trả về tất cả tài liệu từ pets thu thập. Chúng tôi biết rằng điều này trả lại tất cả các tài liệu vì chúng tôi không cung cấp bất kỳ tiêu chí lọc nào. Trên thực tế, chúng tôi không đưa ra bất kỳ đối số nào.

Khi được gọi mà không có đối số, find() trả về tất cả tài liệu từ một bộ sưu tập và trả về tất cả các trường cho tài liệu.

Một cách khác để làm như sau:

 db.pets.find({}) 

Trong trường hợp này, chúng tôi chuyển một tài liệu trống.

Bằng cách thêm vào tài liệu trống này, chúng tôi có thể bắt đầu lọc kết quả.

Lọc kết quả

Cú pháp thực tế của find() như sau:

 db.collection.find(query, projection) 

Điều này có nghĩa là bạn có thể chuyển một truy vấn làm đối số đầu tiên và một phép chiếu làm đối số thứ hai.

Nếu bạn chuyển một truy vấn, nó sẽ được sử dụng để lọc kết quả. Truy vấn là một tài liệu chứa các toán tử truy vấn. Như chúng ta đã thấy trong ví dụ trước, một tài liệu trống trả về tất cả các tài liệu.

Hãy thu hẹp kết quả thành một tập hợp con các tài liệu trong bộ sưu tập.

 db.pets.find({"type":"Dog"}) 

Kết quả:

 {"_id":1, "name":"Wag", "type":"Dog", "weight":20} {"_id":2, "name":"Bark", "type" :"Con chó", "trọng lượng":10} 

Điều này đã thu hẹp kết quả chỉ thành những tài liệu có type trường có giá trị là Dog .

Trong trường hợp này, chúng tôi chỉ cần chuyển một tài liệu làm tiêu chí lọc.

Bạn cũng có thể sử dụng toán tử truy vấn. Những điều này cho phép bạn áp dụng các tiêu chí cụ thể hơn cho truy vấn của mình.

Ví dụ:

 db.pets.find({"weight": { $lt: 10 }}) 

Kết quả:

 {"_id":3, "name":"Meo meo", "type":"Cat", "weight":7} {"_id":4, "name":"Scratch", "type" :"Cat", "weight":8} {"_id":5, "name":"Bruce", "type":"Bat", "weight":3} 

Tài liệu được nhúng

Nếu bạn có tài liệu chứa tài liệu được nhúng, bạn có thể sử dụng các phương pháp sau để truy vấn dữ liệu trong tài liệu được nhúng.

  • Ký hiệu dấu chấm (ví dụ:field.nestedfield: <value> )
  • Biểu mẫu lồng nhau (ví dụ:{field: { nestedfield: <value> } } ). Lưu ý rằng tùy chọn này chỉ khả dụng trong MongoDB 4.4.

Giả sử chúng ta chèn tài liệu sau.

 db.pets.insertOne ({"_id":6, "name":"Fetch", "type":"Dog", "specs":{"height":400, "weight":15, " color ":" brown "}}) 

Chúng tôi có thể sử dụng ký hiệu dấu chấm để truy vấn trong tài liệu được nhúng.

 db.pets.find({ "specs.height": 400 }) 

Kết quả:

 {"_id":6, "name":"Fetch", "type":"Dog", "specs":{"height":400, "weight":15, "color":"brown" }} 

Truy vấn sau trả về cùng một tài liệu, ngoại trừ lần này, chúng tôi tham chiếu tài liệu nhúng bằng biểu mẫu lồng nhau.

 db.pets.find({ 
    "specs" : {
		"height" : 400,
		"weight" : 15,
		"color" : "brown"
	}
 }) 

Kết quả:

 {"_id":6, "name":"Fetch", "type":"Dog", "specs":{"height":400, "weight":15, "color":"brown" }} 

Khi sử dụng biểu mẫu lồng nhau, truy vấn phải khớp chính xác với toàn bộ tài liệu được nhúng. Ví dụ:truy vấn sau không khớp:

 db.pets.find({ 
    "specs" : {
		"height" : 400
	}
 }) 

Định dạng kết quả

Kết quả của ví dụ trước được trả về trong một dòng. Bạn có thể sử dụng cursor.pretty() để định cấu hình con trỏ để hiển thị kết quả ở định dạng dễ đọc hơn.

Để sử dụng pretty() , nối nó vào find() phương pháp.

Ví dụ:

 db.pets.find({ "_id": 6 }).pretty() 

Kết quả:

 {"_id":6, "name":"Fetch", "type":"Dog", "specs":{"height":400, "weight":15, "color":"brown" }} 

Mảng

Bạn có thể tham chiếu dữ liệu trong mảng bằng cách tham chiếu phần tử mảng theo chỉ số của nó hoặc theo giá trị của nó.

Giả sử chúng ta chèn tài liệu sau:

 db.pets.insertOne ({"_id":7, "name":"Jake", "type":"Dog", "Prize":["Top Dog", "Best Dog", "Biggest Dog "]}) 

Nếu chúng tôi muốn tìm tất cả các con chó đạt giải thưởng Top Dog, chúng tôi có thể viết truy vấn sau (truy vấn này sẽ trả về con chó ở trên).

 db.pets.find({ 
    "awards": "Top Dog"
}).pretty() 

Kết quả:

 {"_id":7, "name":"Jake", "type":"Dog", "Prize":["Top Dog", "Best Dog", "Biggest Dog"]} 

Bạn cũng có thể chỉ định chỉ mục phần tử, như sau:

 db.pets.find({ 
    "awards.0": "Top Dog"
}).pretty() 

Thực hiện điều đó yêu cầu giá trị được chỉ định phải ở chỉ mục được chỉ định. Do đó, truy vấn sau không trả về cùng một con chó.

 db.pets.find({ 
    "awards.1": "Top Dog"
}).pretty() 

Lưu ý rằng mảng dựa trên 0, vì vậy chỉ số 0 chỉ định phần tử đầu tiên, 1 chỉ định phần tử thứ hai, v.v.

Phép chiếu

Theo mặc định, tất cả các trường tài liệu được trả về khi bạn sử dụng find() . Nhưng bạn có thể sử dụng phép chiếu để giảm số lượng trường được trả về nếu cần.

Bạn có thể nhớ lại rằng cú pháp cho find() như sau:

 db.collection.find(query, projection) 

Nơi query cung cấp tiêu chí lọc (mà chúng tôi đã thực hiện trong các ví dụ trên) và projection là một phép chiếu tùy chọn chỉ định trường nào sẽ trả về từ bất kỳ tài liệu phù hợp nào. Do đó, nếu chúng ta muốn sử dụng một phép chiếu, chúng ta chỉ cần đặt nó sau truy vấn.

Khi bạn sử dụng phép chiếu, bạn có thể chỉ định các trường để bao gồm , các trường để loại trừ , hoặc cả hai. Để thực hiện việc này, hãy liệt kê tên của trường và 1 (để bao gồm nó) hoặc 0 (để loại trừ nó).

Hiện tại, bộ sưu tập của chúng tôi chứa các tài liệu sau:

 {"_id":1, "name":"Wag", "type":"Dog", "weight":20} {"_id":2, "name":"Bark", "type" :"Dog", "weight":10} {"_id":3, "name":"Meo meo", "type":"Cat", "weight":7} {"_id":4, "name" :"Scratch", "type":"Cat", "weight":8} {"_id":5, "name":"Bruce", "type":"Bat", "weight":3} {" _id ":6," name ":" Fetch "," type ":" Dog "," specs ":{" height ":400," weight ":15," color ":" brown "}} {" _id ":7," name ":" Jake "," type ":" Dog "," Prize ":[" Top Dog "," Best Dog "," Biggest Dog "]} 

Dưới đây là một ví dụ về việc sử dụng phép chiếu để chỉ định các trường để bao gồm:

 db.pets.find({}, { name: 1, type: 1 }) 

Kết quả:

 {"_id":1, "name":"Wag", "type":"Dog"} {"_id":2, "name":"Bark", "type":"Dog"} { "_id":3, "name":"Meo meo", "type":"Cat"} {"_id":4, "name":"Scratch", "type":"Cat"} {"_id":5, "name":"Bruce", "type":"Bat"} {"_id":6, "name":"Fetch", "type":"Dog"} {"_id":7, "name ":" Jake "," type ":" Dog "} 

Lưu ý rằng _id trường được trả về mặc dù chúng tôi không bao gồm trường đó trong phép chiếu của mình. Trường này là một ngoại lệ và được bao gồm theo mặc định.

Nếu bạn không muốn _id trường được trả về, bạn cần phải loại trừ nó một cách rõ ràng.

 db.pets.find({}, { _id: 0, name: 1, type: 1 }) 

Kết quả:

 {"name":"Wag", "type":"Dog"} {"name":"Bark", "type":"Dog"} {"name":"Meo meo", "type":"Cat"} {"name":"Scratch", "type":"Cat"} {"name":"Bruce", "type":"Bat"} {"name":"Tìm nạp", "loại" :"Dog"} {"name":"Jake", "type":"Dog"} 

Đây là một ví dụ khác, lần này chúng tôi chỉ chỉ định những trường nào cần loại trừ.

 db.pets.find({}, { _id: 0, weight: 0, specs: 0, awards: 0 }) 

Kết quả:

 {"name":"Wag", "type":"Dog"} {"name":"Bark", "type":"Dog"} {"name":"Meo meo", "type":"Cat"} {"name":"Scratch", "type":"Cat"} {"name":"Bruce", "type":"Bat"} {"name":"Tìm nạp", "loại" :"Dog"} {"name":"Jake", "type":"Dog"} 

Các phép chiếu khác

Có nhiều thứ khác bạn có thể làm với các phép chiếu. Ví dụ:bắt đầu từ MongDB 4.4, bạn có thể sử dụng các biểu thức tổng hợp để chỉ định giá trị của một trường dự kiến.

Ví dụ:

 db.pets.find({}, { 
    "_id": 0,
    "n": "$name", 
    "t": "$type", 
    "w": "$weight" 
    }) 

Kết quả:

 {"n":"Wag", "t":"Dog", "w":20} {"n":"Bark", "t":"Dog", "w":10} { "n":"Meo meo", "t":"Cat", "w":7} {"n":"Scratch", "t":"Cat", "w":8} {"n":"Bruce", "t":"Bat", "w":3} {"n":"Fetch", "t":"Dog"} {"n":"Jake", "t":"Dog "} 

Ở đây, chúng tôi đã đổi tên các tên trường. Chúng tôi đã làm điều này bằng cách chỉ định một tên mới cho mỗi trường dưới dạng một chuỗi ký tự, bằng cách sử dụng $fieldName cú pháp để xuất giá trị trường đó. Kết quả hơi giống như sử dụng bí danh trong SQL.

Thông tin thêm

Xem tài liệu MongoDB để biết thêm thông tin.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tên trường batchSize bị bỏ qua trong Phép chiếu trường

  2. Bắt đầu với Cơ sở dữ liệu không quan hệ bằng Mongodb 🍃

  3. mongodb:Tăng kết nối tối đa trong mongodb

  4. Lỗi:queryTxt ETIMEOUT khi kết nối với MongoDb Atlas bằng mongoose

  5. Làm thế nào để truy xuất một giá trị từ mongoDB, bằng tên khóa của nó?