簡體   English   中英

Mongoose查詢缺少(或未定義)字段的位置

[英]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.

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