Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Push và slice nhiều lần trong MongoDB

Để thêm phần tử vào mảng và giới hạn kích thước (slice), sử dụng $push với $each và $slice. Tạo collection:

> db.demo656.insertOne({Name:"John"});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea060264deddd72997713cf") }

Hiển thị dữ liệu ban đầu:

> db.demo656.find();

Kết quả:

Lần 1: Push "John" vào mảng ListOfName, slice giữ 9 phần tử cuối (-9):

> db.demo656.update({Name:"John"}, {"$push":{"ListOfName": {"$each": ["John"], "$slice": -9}}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Kết quả:

> db.demo656.find();
{ "_id" : ObjectId("5ea060264deddd72997713cf"), "Name" : "John", "ListOfName" : [ "John" ] }

Lần 2: Push "David", slice -9 (giữ 9 phần tử cuối):

> db.demo656.update({Name:"John"}, {"$push":{"ListOfName": {"$each": ["David"], "$slice": -9}}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Kết quả mảng có 2 phần tử:

> db.demo656.find();
{ "_id" : ObjectId("5ea060264deddd72997713cf"), "Name" : "John", "ListOfName" : [ "John", "David" ] }

Giải thích cú pháp:

  • $each: [values] - cho phép push nhiều giá trị cùng lúc
  • $slice: n - giữ n phần tử đầu (n>0) hoặc n phần tử cuối (n<0)
  • $slice: -9 - giữ tối đa 9 phần tử MỚI NHẤT (cú pháp log như stack/queue)

Ứng dụng: Giới hạn lịch sử hoạt động, log gần nhất, cache LRU. Kết hợp $sort để sắp xếp trước khi slice (MongoDB 3.6+).