缺少(或未定义)字段的猫鼬查询
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
变量上,而不是您的文档或查询。
我有一个问题,我有一个乱七八糟的 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
变量上,而不是您的文档或查询。