缺少(或未定义)字段的猫鼬查询

Mongoose query where with missing (or undefined) fields

我有一个问题,我有一个乱七八糟的 MongoDB 数据库,其中包含修改后的 Mongoose 方案。

我希望能够使用 where 命令进行查询,但如果该字段丢失或 undefined 在任何找到的记录中,则 Mongoose returns 出错。

例如:

  return this.find({personID: req.user._id})
  .where('rangeBefore').lt(time);

这returns一个错误,因为有些记录没有rangeBefore

我想要实现的是过滤掉任何没有 rangeBefore 字段的记录(即未通过 where 测试)。

我试过像这样使用 exists 作为前缀:

  return this.find({personID: req.user._id})
  .exists('rangeBefore').where('rangeBefore').lt(time);

但我仍然遇到错误。

任何人都可以建议一种方法来忽略具有 undefined 字段的记录,而不是返回错误吗?

你可以这样做,returns一个承诺:

find({rangeBefore: { $exists: 1, $lt: time } }).exec()

或使用回调:

find({rangeBefore: { $exists: 1, $lt: time } }).exec(function(err, record){

})

如果您只想修改现有查询:

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) { });

您的错误信息:

Cast to number failed for value "undefined" at path "rangeBefore"

表示您的 time 变量是 undefined。像这样的查询自然会忽略 rangeBefore 不存在的文档。

所以问题出在您的 time 变量上,而不是您的文档或查询。