[英]Mongoose query where with missing (or undefined) fields
我有一個問題,我有一個凌亂的MongoDB數據庫與修訂的Mongoose方案。
我希望能夠使用where
命令進行查詢,但如果在任何找到的記錄中缺少或undefined
字段,則Mongoose會返回錯誤。
例如:
return this.find({personID: req.user._id})
.where('rangeBefore').lt(time);
這會返回錯誤,因為某些記錄沒有rangeBefore
。
我想要實現的是沒有rangeBefore
字段的任何記錄被過濾掉(即它沒有通過where
測試)。
我試過像這樣的exists
前綴:
return this.find({personID: req.user._id})
.exists('rangeBefore').where('rangeBefore').lt(time);
但我仍然得到一個錯誤。
任何人都可以建議一種方法來忽略具有undefined
字段的記錄,而不是返回錯誤?
如果您只想修改現有查詢:
return this.find({ personID: req.user._id,
rangeBefore: { $exists: true, $ne: null } //also check for nulls
})
.where('rangeBefore').lt(time);
或者,如果適合,您也可以使用回調方法:
this.find({personID: req.user._id,
rangeBefore: { $exists: true, $ne: null, $lt: time }
})
.exec(function(err, record) { });
你可以這樣做,它返回一個承諾:
find({rangeBefore: { $exists: 1, $lt: time } }).exec()
或使用回調:
find({rangeBefore: { $exists: 1, $lt: time } }).exec(function(err, record){
})
您的錯誤消息:
對於路徑“rangeBefore”的值“undefined”,轉換為數字失敗
表示您的time
變量undefined
。 像這樣的查詢自然會忽略rangeBefore
不存在的文檔。
所以問題在於你的time
變量,而不是你的文檔或查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.