将 CoreMongooseArray 转换为普通数组

10

我正在从一个模式中筛选出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);
            }
}
4个回答

20

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

来自文档

启用lean选项的查询返回的文档是普通的JavaScript对象,而不是Mongoose文档。它们没有保存方法、getter/setter、虚拟属性或其他Mongoose功能。


12

1

由于某些原因,.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);

1
如果您只想将CoreMongooseArray转换为普通数组而不改变其他任何内容:
const jsArray = [...mongooseArray];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接