这个问题已经有了答案:
Querying after populate in Mongoose
6个答案
我有两个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。如何只检索那些id不为空的对象,即如何使其完全忽略空值。?

最佳答案

运行填充查询时,它在内部运行findbyid()函数并返回所有数据。
但是,如果找不到与该id匹配的任何文档,则返回空对象。
无法预先查询非空引用对象。
但是有一些方法可以快速过滤空值。
您可以使用lodash库的filter来过滤最终结果。链接:https://lodash.com/docs/4.17.4#filter
更新包含图书引用的主架构,并在删除图书时删除该引用。您可以使用主模式上的钩子来执行此操作。
someschema.post('remove',function(doc){//update your documents here});

10-02 16:44