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ớiupdate()
để 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
và$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.