簡體   English   中英

僅當ref不為null時才嘗試填充mongoose - 不工作

[英]Trying to populate in mongoose only if ref is not null - not working

我正在嘗試獲取包含作者信息的書籍清單。

有些用戶已被刪除,因此他們在數據庫中不再有文檔,因此,他們的信息為空。

如果他們的創作者仍然存在,我只想拉書。

這是我的代碼:

  Book.find({_creator:{$ne:null}}).populate(
        {
            path: '_creator',
            match: { _id: { $ne: null }}
        })
        .exec(function (err,books) {
        if(err) throw err;
        if(books) {
            res.send(books)
        }
    })

這是它返回的內容:

  [
    {
        "_id":"55d98e6a4de71010099c59eb",
        "dateOfCreation":"2015-08-23T09:12:10.095Z",
        "_creator":null,
        "__v":0,
        "coverUrl":"cover14403211323926quv.png",
        "description":"asdasd",
        "name":"asdasd"
    }
]

請注意,_creator字段為空。 這是為什么?

您需要了解代碼的執行順序:

  1. {_creator:{$ne:null}}{_creator:{$ne:null}}獲取數據庫中的所有書籍。 Mongo只查看books集合中的引用來確定要返回的文檔。 您的書仍然引用了作者,並且mongo不會注意到作者集合中沒有匹配的作者,因此您的書已加載。

  2. mongoose正在填充所有返回的結果:所以它從Authors集合中加載作者並用真實對象替換引用。 對於你的書,它沒有找到匹配的作者,因此它將null放在那里。

這就是為什么你最終得到你的結果列表。

Mongo不支持聯接 - 因此您無法執行包含來自多個集合的數據的查詢。 Populate只是用真實數據替換結果列表中的引用的一種方法,您永遠不能使用填充數據作為where子句的一部分。

要解決您的問題,您可以:

  • 在JS代碼中過濾您的最終結果列表,例如使用lodash庫的_.filter。
  • 刪除作者時,請更新所有圖書並刪除參考。 您可以在Author-Schema上使用掛鈎來執行此操作。

AuthorSchema.post('remove', function(doc) {// update your books here});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM