Mongoose合并两个find查询结果报错,求可行解决方案
问题解答
为什么doc1.append()报错?
Mongoose的model.find()方法不会直接返回文档数组,它返回的是一个Query对象——这是Mongoose用来构建、配置查询的中间实例,并不是最终的查询结果。只有执行这个查询(比如通过.exec()或await)后,才能拿到真正的文档数组,而数组本身也没有append()方法,JS数组合并要用push()或concat()这类方法。
合并两个查询结果的方法
方法1:用$in合并为单个查询(推荐,性能更优)
没必要发起两次数据库请求,直接用MongoDB的$in操作符一次查询出所有符合条件的文档:
const combinedDocs = await model.find({ name: { $in: ["ABC", "XYZ"] } });
数据库仅需一次查询,返回的就是所有name为ABC或XYZ的文档数组,效率更高。
方法2:分开查询后合并结果
如果确实需要分开执行两个查询,用Promise.all等待两个查询都完成,再合并结果:
// 执行两个查询,获取实际结果数组 const [doc1, doc2] = await Promise.all([ model.find({ name: "ABC" }).exec(), model.find({ name: "XYZ" }).exec() ]); // 合并数组的两种方式: // 1. 生成新数组,不修改原数组 const combinedDocs = doc1.concat(doc2); // 2. 直接把doc2的元素追加到doc1末尾,修改doc1 doc1.push(...doc2);
注意必须通过await或.then()获取查询的实际结果,不能直接操作Query对象。
内容的提问来源于stack exchange,提问作者NodeFriend
相关产品推荐
相关产品推荐

