Javascript Mongoose.js CastError:value“的数字转换失败”;{&&x27;$gte&&x27;:1}";在路径上“;“访问”;对于“型号”;“项目”;
我试图在一组用户中找到一个用户,这些用户的id与我的令牌中的id相同,访问权限大于1 为此,我使用了以下代码,但我得到了一个CastError:Javascript Mongoose.js CastError:value“的数字转换失败”;{&&x27;$gte&&x27;:1}";在路径上“;“访问”;对于“型号”;“项目”;,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我试图在一组用户中找到一个用户,这些用户的id与我的令牌中的id相同,访问权限大于1 为此,我使用了以下代码,但我得到了一个CastError: Project.findOne({ Users: {User: decoded._id, access: { $gte: authStatus }}, _id: id }) .then((result) => { console.log(result) }) .catch((
Project.findOne({ Users: {User: decoded._id, access: { $gte: authStatus }}, _id: id })
.then((result) => {
console.log(result)
})
.catch((err) => {
console.log(err)
});
CastError: Cast to Number failed for value "{ '$gte': 1 }" at path "access" for model "Projekt"
at model.Query.exec (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\query.js:4371:21)
at model.Query.Query.then (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\query.js:4463:15)
at validateOwner (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\routes\modules\verifyAccess.js:10:5)
at C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\routes\project.route.js:44:33
at Layer.handle [as handle_request] (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\route.js:137:13)
at module.exports (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\routes\modules\verifyToken.js:11:3)
at Layer.handle [as handle_request] (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\index.js:281:22
at param (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\index.js:354:14)
at param (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\index.js:365:14)
at Function.process_params (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\index.js:410:3)
at next (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\index.js:275:10) {
messageFormat: undefined,
stringValue: `"{ '$gte': 1 }"`,
kind: 'Number',
value: { '$gte': 1 },
path: 'access',
reason: AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value:
assert.ok(!isNaN(val))
at castNumber (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\cast\number.js:28:10)
at SchemaNumber.cast (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\schema\number.js:382:12)
at SchemaNumber.SchemaType.applySetters (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\schematype.js:1075:12)
at EmbeddedDocument.$set (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\document.js:1250:20)
at EmbeddedDocument._handleIndex (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\document.js:1019:14)
at EmbeddedDocument.$set (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\document.js:960:22)
at EmbeddedDocument.Document (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\document.js:150:12)
at EmbeddedDocument [as constructor] (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\types\embedded.js:42:12)
at new EmbeddedDocument (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\schema\documentarray.js:115:17)
at DocumentArrayPath.SchemaArray.castForQuery (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\schema\array.js:485:13)
at DocumentArrayPath.SchemaType.castForQueryWrapper (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\schematype.js:1477:20)
at cast (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\cast.js:274:34)
at model.Query.Query.cast (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\query.js:4772:12)
at model.Query.Query._castConditions (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\query.js:1872:10)
at model.Query.<anonymous> (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\query.js:2129:8)
at model.Query._wrappedThunk [as _findOne] (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\helpers\query\wrapThunk.js:16:8) {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '=='
}
}
我的模式:
const ProjectSchema = new Schema(
{
Users: [
{
User: { type: mongoose.Schema.Types.ObjectId, ref: 'usertemps' },
access: { type: Number, required: true }
}
],
name: { type: String, required: true },
deadline: { type: Date, required: true }
},
{
timestamps: true
}
);
卡斯特罗:
Project.findOne({ Users: {User: decoded._id, access: { $gte: authStatus }}, _id: id })
.then((result) => {
console.log(result)
})
.catch((err) => {
console.log(err)
});
CastError: Cast to Number failed for value "{ '$gte': 1 }" at path "access" for model "Projekt"
at model.Query.exec (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\query.js:4371:21)
at model.Query.Query.then (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\query.js:4463:15)
at validateOwner (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\routes\modules\verifyAccess.js:10:5)
at C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\routes\project.route.js:44:33
at Layer.handle [as handle_request] (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\route.js:137:13)
at module.exports (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\routes\modules\verifyToken.js:11:3)
at Layer.handle [as handle_request] (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\index.js:281:22
at param (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\index.js:354:14)
at param (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\index.js:365:14)
at Function.process_params (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\index.js:410:3)
at next (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\express\lib\router\index.js:275:10) {
messageFormat: undefined,
stringValue: `"{ '$gte': 1 }"`,
kind: 'Number',
value: { '$gte': 1 },
path: 'access',
reason: AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value:
assert.ok(!isNaN(val))
at castNumber (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\cast\number.js:28:10)
at SchemaNumber.cast (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\schema\number.js:382:12)
at SchemaNumber.SchemaType.applySetters (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\schematype.js:1075:12)
at EmbeddedDocument.$set (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\document.js:1250:20)
at EmbeddedDocument._handleIndex (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\document.js:1019:14)
at EmbeddedDocument.$set (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\document.js:960:22)
at EmbeddedDocument.Document (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\document.js:150:12)
at EmbeddedDocument [as constructor] (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\types\embedded.js:42:12)
at new EmbeddedDocument (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\schema\documentarray.js:115:17)
at DocumentArrayPath.SchemaArray.castForQuery (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\schema\array.js:485:13)
at DocumentArrayPath.SchemaType.castForQueryWrapper (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\schematype.js:1477:20)
at cast (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\cast.js:274:34)
at model.Query.Query.cast (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\query.js:4772:12)
at model.Query.Query._castConditions (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\query.js:1872:10)
at model.Query.<anonymous> (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\query.js:2129:8)
at model.Query._wrappedThunk [as _findOne] (C:\Users\tomod\OneDrive\Dokumenter\GitHub\Project-Manager-Project\node_modules\mongoose\lib\helpers\query\wrapThunk.js:16:8) {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '=='
}
}
CastError:model“Projekt”的路径“access”处的值“{'$gte':1}”的数字转换失败
在model.Query.exec(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\mongoose\lib\Query.js:4371:21)
在model.Query.Query.then(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\mongoose\lib\Query.js:4463:15)
在validateOwner(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\routes\modules\verifyAccess.js:10:5)
在C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\routes\Project.route.js:44:33
在Layer.handle[作为handle\u请求](C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\express\lib\router\Layer.js:95:5)
下一步(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\express\lib\router\route.js:137:13)
在module.exports(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\routes\modules\verifyToken.js:11:3)
在Layer.handle[作为handle\u请求](C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\express\lib\router\Layer.js:95:5)
下一步(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\express\lib\router\route.js:137:13)
在Route.dispatch(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\express\lib\router\Route.js:112:3)
在Layer.handle[作为handle\u请求](C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\express\lib\router\Layer.js:95:5)
位于C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\express\lib\router\index.js:281:22
在参数处(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\express\lib\router\index.js:354:14)
在参数处(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\express\lib\router\index.js:365:14)
在Function.process_参数处(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\express\lib\router\index.js:410:3)
下一步(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\express\lib\router\index.js:275:10){
messageFormat:未定义,
stringValue:`{'$gte':1}`,
种类:'编号',
值:{'$gte':1},
路径:“访问”,
原因:AssertionError[ERR_ASSERTION]:计算为错误值的表达式:
assert.ok(!isNaN(val))
在castNumber(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\mongoose\lib\cast\number.js:28:10)
在SchemaNumber.cast(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\mongoose\lib\schema\number.js:382:12)
位于SchemaNumber.SchemaType.applySetters(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\mongoose\lib\SchemaType.js:1075:12)
位于EmbeddedDocument.$set(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\mongoose\lib\document.js:1250:20)
位于EmbeddedDocument.\u handleIndex(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\mongoose\lib\document.js:1019:14)
位于EmbeddedDocument.$set(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\mongoose\lib\document.js:960:22)
在EmbeddedDocument.Document(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\mongoose\lib\Document.js:150:12)
在EmbeddedDocument[作为构造函数](C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\mongoose\lib\types\embedded.js:42:12)
在新的EmbeddedDocument(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\mongoose\lib\schema\documentarray.js:115:17)中
位于documentaraypath.SchemaArray.castForQuery(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\mongoose\lib\schema\array.js:485:13)
位于documentaraypath.SchemaType.castforqueryrapper(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\mongoose\lib\SchemaType.js:1477:20)
at cast(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\mongoose\lib\cast.js:274:34)
在model.Query.Query.cast(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\mongoose\lib\Query.js:4772:12)
在model.Query.Query.\u castConditions(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\mongoose\lib\Query.js:1872:10)
位于model.Query。(C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\u modules\mongoose\lib\Query.js:2129:8)
在model.Query.\u wrappedThunk[as\u findOne](C:\Users\tomod\OneDrive\dokumcenter\GitHub\Project Manager Project\node\modules\mongoose\lib\helpers\Query\wrapThunk.js:16:8){
生成消息:对,
代码:“ERR_断言”,
实际:错误,
预期:对,,
运算符:'='
}
}
这样做可能吗?还是我的做法完全错了
希望有人能帮助您,谢谢您的时间。要查询嵌套字段,您应该使用
Project.findOne({
“Users.User”:已解码。_id,
“Users.access”:{$gte:authStatus},
_id:id,
})
。然后((结果)=>{
控制台日志(结果);
})
.catch((错误)=>{
控制台日志(err);
});
编辑:
为了过滤数组中的元素并仅返回符合特定条件的元素,可以使用$filter
运算符
项目