node.js - 从 Mongoose 填充中获取非空数据

标签 node.js mongodb mongoose mean-stack

我有两个 mongodb 集合 Sparks 和 Sparksteam,它们是使用 mongoose populate 函数连接的

这是代码。

 Books.find({"user_id": "55006c36c30f0edc5400022d",$or: [{"status": 2}, {"status": 1}]}).sort({"order_date": -1}).populate({
         path: 'book_id',
         select: 'title _id user task_category create_date description end_date status ref_number order_date'
         }).exec(function (err, data) {

         console.log("Data found:" + data.length);
         data.forEach(function (check) {

             var obj = new Object();

         if (check.book_id !== null) {
                 obj._id =  check.book_id._id;
                 obj.title = check.book_id.title;
                 obj.description = check.book_id.description;
                 obj.ref_number = check.book_id.ref_number;
                 obj.user = check.book_id.user;
                 obj.task_category =check.book_id.task_category;
                 obj.create_date = moment.utc(check.create_date).format("DD-MM-YYYY HH:mm:ss");
                 obj.status = check.book_id.status;
                 obj.order_date = check.book.order_date;
                console.log(obj);
        }

在获取数据时,它也会获取空值,这些 _ids 在 Sparks 集合中不可用。如何只检索那些_ids不为null的对象,即如何使其完全忽略null值。 ?

最佳答案

当您运行填充查询时,它会在内部运行 findById() 函数并返回所有数据。 但是,当它找不到任何与该 _id 匹配的文档时,它返回 null 对象。

无法预先查询非空引用对象。 但有一些方法可以快速过滤掉空值。

  1. 您可以使用 lodash 库的 _.filter 来过滤最终结果。链接:https://lodash.com/docs/4.17.4#filter

  2. 更新包含图书引用的主架构,并在删除图书时删除引用。您可以在主架构上使用 Hook 来执行此操作。

someSchema.post('remove', function(doc) {//在此处更新您的文档});

关于node.js - 从 Mongoose 填充中获取非空数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41548725/

相关文章:

node.js - MongoError : Invalid Operation, 没有批量插入操作

javascript - Nodejs 和更新 zip 存档中的文件

spring - 使用 Spring 启动对 mongoDB 进行身份验证失败

mongodb - mongodb文本搜索错误没有文本索引

node.js - 如何在 NestJS 上为 MongoDB 实现存储库设计模式

javascript - 数组未填满

javascript - 使用 Node.js(watson-developer-cloud 模块)发送 AlchemyData News 查询

mongodb - 查找并删除所有 "createdDate"早一个月的文档

mongodb - 在 MongoDB 中保存 java.sql.Date 时出错

javascript - 数据库中的日期在前端被视为String