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

MongoDB $ push

Trong MongoDB, bạn có thể sử dụng $push toán tử để nối một giá trị vào một mảng.

Bạn có thể sử dụng các công cụ sửa đổi khác nhau để chỉ định vị trí của giá trị trong mảng, thứ tự của các phần tử trong mảng, nối nhiều giá trị, v.v.

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:

 db.products.find() 

Kết quả:

 {"_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"]}  

Và giả sử chúng tôi muốn nối một giá trị vào mảng trong tài liệu 3.

Chúng ta có thể sử dụng $push kết hợp với update() để nối giá trị:

 db.products.update(
   { _id: 3 },
   { $push: { sizes: "XL" } }
) 

Đầu ra:

 WriteResult ({"nMished":1, "nUpserted":0, "nModified":1}) 

Hãy xem lại bộ sưu tập để xác minh sự thay đổi:

 db.products.find() 

Kết quả:

 {"_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", "XL" ]} 

Chèn giá trị ở một vị trí nhất định

Bạn có thể sử dụng $each$position bổ trợ để chỉ định nơi giá trị sẽ được chèn vào mảng.

Ví dụ:chúng ta có thể sử dụng giá trị 0 để chèn nó vào đầu mảng.

Ví dụ:

 db.products.update(
   { _id: 3 },
   { 
     $push: { 
        sizes: {
           $each: [ "S" ],
           $position: 0
        }
      } 
    }
) 

Đầu ra:

 WriteResult ({"nMished":1, "nUpserted":0, "nModified":1}) 

$each công cụ sửa đổi nối nhiều giá trị vào trường mảng. Tuy nhiên, trong trường hợp này, chúng tôi chỉ chèn một giá trị vào mảng để sử dụng $position công cụ sửa đổi, nó phải xuất hiện với $each bổ ngữ.

Hãy kiểm tra lại bộ sưu tập:

 db.products.find() 

Kết quả:

 {"_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":["S", "M", "L" , "XL"]} 

Nối và sắp xếp

Giả sử chúng ta có một bộ sưu tập với các tài liệu sau:

 db.players.find() 

Kết quả:

 {"_id":1, "score":[1, 5, 3]} {"_id":2, "score":[8, 17, 18]} {"_id":3, "điểm ":[15, 11, 8]} 

Và giả sử chúng ta muốn nối một số giá trị vào mảng trong tài liệu 3, nhưng chúng ta cũng muốn sắp xếp mảng theo thứ tự tăng dần sau khi chúng ta đã thêm giá trị.

Chúng tôi có thể làm điều này:

 db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 5, 12 ],
           $sort: 1
        }
      } 
    }
) 

Đầu ra:

 WriteResult ({"nMished":1, "nUpserted":0, "nModified":1}) 

Bây giờ khi chúng ta xem bộ sưu tập, chúng ta có thể thấy rằng tài liệu thứ ba đã được sửa đổi cho phù hợp.

 db.players.find() 

Kết quả:

 {"_id":1, "score":[1, 5, 3]} {"_id":2, "score":[8, 17, 18]} {"_id":3, "điểm ":[5, 8, 11, 12, 15]} 

Để sắp xếp nó theo thứ tự giảm dần, hãy sử dụng $sort: -1 .

Cắt mảng

Bạn có thể sử dụng $slice sửa đổi để giới hạn số phần tử trong mảng.

Ví dụ:hãy thêm một giá trị khác vào mảng, nhưng sau đó chia mảng thành một số phần tử nhất định.

 db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 3 ],
           $slice: 3
        }
      } 
    }
) 

Đầu ra:

 WriteResult ({"nMished":1, "nUpserted":0, "nModified":1}) 

Bây giờ chúng ta hãy kiểm tra lại bộ sưu tập:

 db.players.find() 

Kết quả:

 {"_id":1, "score":[1, 5, 3]} {"_id":2, "score":[8, 17, 18]} {"_id":3, "điểm ":[5, 8, 11]} 

Trong trường hợp này, mảng đã được chia nhỏ, nhưng giá trị mà chúng tôi thêm vào thậm chí không nằm trong mảng cuối cùng. Điều này là do giá trị đã được thêm vào mảng và chúng tôi không sử dụng $sort và do đó giá trị vẫn ở cuối mảng trước khi mảng được chia thành ba phần tử đầu tiên của nó.

Đây là một lần nữa, ngoại trừ lần này với $sort bổ ngữ.

 db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 3 ],
           $sort: 1,
           $slice: 3
        }
      } 
    }
) 

Đầu ra:

 WriteResult ({"nMished":1, "nUpserted":0, "nModified":1}) 

Kiểm tra bộ sưu tập:

 db.players.find() 

Kết quả:

 {"_id":1, "score":[1, 5, 3]} {"_id":2, "score":[8, 17, 18]} {"_id":3, "điểm ":[3, 5, 8]} 

Chỉ thêm giá trị nếu nó không tồn tại

Nếu bạn chỉ muốn giá trị được thêm vào khi nó chưa tồn tại trong mảng, thì hãy xem xét sử dụng $addToSet nhà điều hành.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Lỗi:tài liệu thao tác cập nhật phải chứa toán tử nguyên tử, khi chạy updateOne

  2. Cách tạo chỉ mục phân biệt chữ hoa chữ thường trong MongoDB

  3. Sự cố cài đặt trình điều khiển PHP MongoDb trên wamp

  4. Tìm và Đếm các phần tử của bộ sưu tập với Mongoose

  5. TransientTransactionError trong Mongoose (hoặc MongoDB) là gì?