如何将CoreMongooseArray转为普通数组?Mongoose跨Schema更新问题
如何将Mongoose的CoreMongooseArray转换为普通数组?
我明白你遇到的问题了——从Mongoose文档里用slice截取数组后,得到的不是普通JavaScript数组,而是CoreMongooseArray实例,这导致你更新另一个Schema时出现了不符合预期的格式。别担心,有几个简单的方法可以把它转换成普通数组:
常用转换方法
方法1:使用Mongoose自带的
.toArray()方法
Mongoose的数组实例专门提供了toArray()方法,能直接把CoreMongooseArray转换成普通数组:var shortListed = users.slice(0, 2).toArray();方法2:ES6展开运算符
用ES6的展开运算符直接解构出数组元素,生成普通数组:var shortListed = [...users.slice(0, 2)];方法3:
Array.from()函数
利用Array.from()将类数组的CoreMongooseArray转换为普通数组:var shortListed = Array.from(users.slice(0, 2));
额外代码优化提示
另外,你代码里的$push操作有个小细节需要注意:
"$push": { "usersConnected": [shortListed] }
这样写会把shortListed数组作为单个元素添加到usersConnected里,导致嵌套数组的结构。如果想把shortListed里的每个元素都单独添加到usersConnected数组中,应该用$each操作符:
"$push": { "usersConnected": { "$each": shortListed } }
修改后的完整代码
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).toArray(); try { // 根据需求选择对应的更新写法 await connection.chatschema.updateMany( {}, { "$push": { "usersConnected": { "$each": shortListed } } }, { "upsert": true } ); } catch (err) { res.status(201).json(err); } } });
内容的提问来源于stack exchange,提问作者vinaykumar0459
相关产品推荐
相关产品推荐

