我正在将一个架构中的 2 个元素列入候选名单,并希望在另一个架构中更新。 为此,我使用 slice 方法将数组中的前 2 个元素列入候选名单。 但是我正在得到
CoreMongooseArray ['element1', 'element2']
而不是 ["元素1", "元素2"]
如何删除"核心猫鼬阵列"?
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()
。
从文档中:
从启用了精益选项的查询返回的文档是纯 JavaScript 对象,而不是 Mongoose 文档。他们没有保存方法,getter/setter,虚拟或其他猫鼬功能。
如果您已经获得了猫鼬数组并且喜欢转换为简单的 js 数组
const jsArray = mongooseArray.toObject();
https://mongoosejs.com/docs/api/array.html#mongoosearray_MongooseArray-toObject
出于某种原因,.toObject()
对我不起作用。 lean()
选项有效,但当您已经有一个包含猫鼬数组的对象时,它不适合。因此,如果您已经有猫鼬数组并且只想将其转换为纯 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];