数组


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»

将转换后的 val 设置为索引 i 处,并将数组标记为已修改。

示例

// 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 操作,可能覆盖从检索对象到保存对象之间的任何更改。