从猫鼬填充中获取非空数据[重复]

Posted

技术标签:

【中文标题】从猫鼬填充中获取非空数据[重复]【英文标题】:Fetching not null data from mongoose populate [duplicate] 【发布时间】:2017-05-23 18:08:25 【问题描述】:

我有两个 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);
        

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

【问题讨论】:

【参考方案1】:

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

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

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

      更新包含书籍参考的主架构,并在删除书籍时删除参考。您可以使用主 Schema 上的钩子来执行此操作。

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

【讨论】:

以上是关于从猫鼬填充中获取非空数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从猫鼬的多个集合中获取数据?

无法访问从猫鼬fineOne()返回的json中的键[重复]

是否可以从猫鼬的文档中获取模型?

如何从猫鼬中获取类型化的对象

从猫鼬聚合管道中的数组数组中获取单个数组

如何从猫鼬的另一个集合中计算文档?