CoreMongooseArray 到普通数组

CoreMongooseArray to Normal Array

我正在从一个模式中筛选出 2 个元素,并希望在另一个模式中进行更新。为此,我使用 slice 方法将数组中的前 2 个元素列入候选名单。但正在

CoreMongooseArray ['element1','element2']

而不是 ["element1"、"element2"]

如何删除 "CoreMongooseArray"?

connection.connectedusers.find({},  async (err, docs) => {
if(err) throw err;
var users = docs[0].connectArray;
if (docs[0] != null && users.length >= 2) {
 var shortListed = users.slice(0, 2);
 try {
                await connection.chatschema.updateMany({}, { $push: { usersConnected: [shortListed] } }, { upsert: true });
            } catch (err) {
                res.status(201).json(err);
            }
}

您需要在查询中添加 lean()

来自docs

Documents returned from queries with the lean option enabled are plain javascript objects, not Mongoose Documents. They have no save method, getters/setters, virtuals, or other Mongoose features.

如果你已经有了 mongoose 数组并且想转换成简单的 js 数组

const jsArray = mongooseArray.toObject();

https://mongoosejs.com/docs/api/array.html#mongoosearray_MongooseArray-toObject

出于某种原因 .toObject() 对我不起作用。 lean() 选项有效,但当您已经有一个包含 mongoose 数组的对象时,它不适合。因此,如果您已经拥有 mongoose 数组并且只想将其转换为纯 js 数组,则可以使用以下代码:

function mongooseArrayToArray(mongooseArray) {
  const array = [];
  for (let i = 0; i < mongooseArray.length; i += 1) {
    array.push(mongooseArray[0]);
  }
  return array;
};

用法:

const array = mongooseArrayToArray(mongooseArray);

如果您只想将 CoreMongooseArray 转换为普通数组而不更改任何其他内容:

const jsArray = [...mongooseArray];