陣列


MongooseArray.prototype.$pop()

請參閱

每次文件 save() 最多原子性彈出陣列一次。

注意

在儲存之前對陣列多次調用此方法,會發送與調用一次相同的命令。 此更新是使用 MongoDB 的 $pop 方法實作,該方法強制執行此限制。

 doc.array = [1,2,3];

 const popped = doc.array.$pop();
 console.log(popped); // 3
 console.log(doc.array); // [1,2]

 // no affect
 popped = doc.array.$pop();
 console.log(doc.array); // [1,2]

 doc.save(function (err) {
   if (err) return handleError(err);

   // we saved, now $pop works again
   popped = doc.array.$pop();
   console.log(popped); // 2
   console.log(doc.array); // [1]
 })

MongooseArray.prototype.$shift()

請參閱

每次文件 save() 最多原子性將陣列移位一次。

注意

在儲存之前對陣列多次調用此方法,會發送與調用一次相同的命令。 此更新是使用 MongoDB 的 $pop 方法實作,該方法強制執行此限制。

 doc.array = [1,2,3];

 const shifted = doc.array.$shift();
 console.log(shifted); // 1
 console.log(doc.array); // [2,3]

 // no affect
 shifted = doc.array.$shift();
 console.log(doc.array); // [2,3]

 doc.save(function (err) {
   if (err) return handleError(err);

   // we saved, now $shift works again
   shifted = doc.array.$shift();
   console.log(shifted ); // 2
   console.log(doc.array); // [3]
 })

MongooseArray.prototype.addToSet()

參數
  • [...args] «any»
傳回
  • «Array» 已新增的值

如果值尚未存在,則將其新增到陣列中。

範例

console.log(doc.array) // [2,3,4]
const added = doc.array.addToSet(4,5);
console.log(doc.array) // [2,3,4,5]
console.log(added)     // [5]

MongooseArray.prototype.includes()

參數
  • obj «Object» 要檢查的項目

  • fromIndex «Number»
傳回
  • «Boolean»

傳回 obj 是否包含在陣列中。


MongooseArray.prototype.indexOf()

參數
  • obj «Object» 要尋找的項目

  • fromIndex «Number»
傳回
  • «Number»

傳回 obj 的索引,如果找不到則傳回 -1


MongooseArray.prototype.inspect()

console.log 的輔助工具


MongooseArray.prototype.nonAtomicPush()

參數
  • [...args] «any»

將項目非原子性地推送到陣列。

注意

將整個陣列標記為已修改,如果儲存,將其儲存為 $set 操作,可能會覆寫您檢索物件和儲存物件之間發生的任何變更。


MongooseArray.prototype.pop()

請參閱

使用正確的變更追蹤包裝 Array#pop

注意

將整個陣列標記為已修改,這會將整個陣列傳遞到 $set,可能會覆寫您檢索物件和儲存物件之間發生的任何變更。


MongooseArray.prototype.pull()

參數
  • [...args] «any»
請參閱

原子性地從陣列中拉出項目。相等性是透過將提供的值轉換為嵌入式文件並使用 Document.equals() 函式進行比較來判定的。

範例

doc.array.pull(ObjectId)
doc.array.pull({ _id: 'someId' })
doc.array.pull(36)
doc.array.pull('tag 1', 'tag 2')

若要從子文件陣列中移除文件,我們可以傳遞一個帶有符合的 _id 的物件。

doc.subdocs.push({ _id: 4815162342 })
doc.subdocs.pull({ _id: 4815162342 }) // removed

或者,我們可以傳遞 _id 並讓 mongoose 處理。

doc.subdocs.push({ _id: 4815162342 })
doc.subdocs.pull(4815162342); // works

第一次拉取呼叫會在資料庫上產生原子操作,如果重複呼叫拉取而不儲存文件,則會改為在整個陣列上使用 $set 操作,覆寫這段時間在資料庫中發生的可能變更。


MongooseArray.prototype.push()

參數
  • [...args] «Object»

使用正確的變更追蹤包裝 Array#push

範例

const schema = Schema({ nums: [Number] });
const Model = mongoose.model('Test', schema);

const doc = await Model.create({ nums: [3, 4] });
doc.nums.push(5); // Add 5 to the end of the array
await doc.save();

// You can also pass an object with `$each` as the
// first parameter to use MongoDB's `$position`
doc.nums.push({
  $each: [1, 2],
  $position: 0
});
doc.nums; // [1, 2, 3, 4, 5]

MongooseArray.prototype.remove()

請參閱

pull 的別名


MongooseArray.prototype.set()

傳回
  • «Array» this

在索引 i 設定轉換後的 val,並將陣列標記為已修改。

範例

// given documents based on the following
const Doc = mongoose.model('Doc', new Schema({ array: [Number] }));

const doc = new Doc({ array: [2,3,4] })

console.log(doc.array) // [2,3,4]

doc.array.set(1,"5");
console.log(doc.array); // [2,5,4] // properly cast to number
doc.save() // the change is saved

// VS not using array#set
doc.array[1] = "5";
console.log(doc.array); // [2,"5",4] // no casting
doc.save() // change is not saved

MongooseArray.prototype.shift()

使用正確的變更追蹤包裝 Array#shift

範例

doc.array = [2,3];
const res = doc.array.shift();
console.log(res) // 2
console.log(doc.array) // [3]

注意

將整個陣列標記為已修改,如果儲存,將其儲存為 $set 操作,可能會覆寫您檢索物件和儲存物件之間發生的任何變更。


MongooseArray.prototype.sort()

請參閱

使用正確的變更追蹤包裝 Array#sort

注意

將整個陣列標記為已修改,如果儲存,將其儲存為 $set 操作,可能會覆寫您檢索物件和儲存物件之間發生的任何變更。


MongooseArray.prototype.splice()

請參閱

使用正確的變更追蹤和轉換包裝 Array#splice

注意

將整個陣列標記為已修改,如果儲存,將其儲存為 $set 操作,可能會覆寫您檢索物件和儲存物件之間發生的任何變更。


MongooseArray.prototype.toObject()

參數
  • options «Object»
傳回
  • «Array»

傳回原生 js 陣列。


MongooseArray.prototype.unshift()

使用正確的變更追蹤包裝 Array#unshift

注意

將整個陣列標記為已修改,如果儲存,將其儲存為 $set 操作,可能會覆寫您檢索物件和儲存物件之間發生的任何變更。