[英]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字段為空。 這是為什么?
您需要了解代碼的執行順序:
{_creator:{$ne:null}}
從{_creator:{$ne:null}}
獲取數據庫中的所有書籍。 Mongo只查看books集合中的引用來確定要返回的文檔。 您的書仍然引用了作者,並且mongo不會注意到作者集合中沒有匹配的作者,因此您的書已加載。
mongoose正在填充所有返回的結果:所以它從Authors集合中加載作者並用真實對象替換引用。 對於你的書,它沒有找到匹配的作者,因此它將null
放在那里。
這就是為什么你最終得到你的結果列表。
Mongo不支持聯接 - 因此您無法執行包含來自多個集合的數據的查詢。 Populate只是用真實數據替換結果列表中的引用的一種方法,您永遠不能使用填充數據作為where子句的一部分。
要解決您的問題,您可以:
AuthorSchema.post('remove', function(doc) {// update your books here});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.