从mongoose填充非空数据填充

我有两个MongoDB集合Sparks和Sparksteam,它们正在使用mongoose填充函数进行连接

这是代码。

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); } 

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

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

事先没有办法查询非空引用对象。 但是有办法快速过滤出空值。

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

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

    someSchema.post('remove',function(doc){//在这里更新文档});