问题描述
我正在尝试使用字符串和数字作为字段进行查找查询。该查询在单独查找字符串时起作用。我怎样才能让它也适用于数字?
var check = request.body.cookie; // String
var tok = request.body.token; // It's a number
db.collection("users").find({'name':check,'token':tok}).toArray(function(err,rows) {
if(!rows.length)
{
console.log("No data found");
}
});
下面给出了一个样本集合
> db.users.find()
{ "_id" : ObjectId("608be0dc8b83df0248ed2fc1"),"name" : "John","age" : "18","gender" : "M","country" : "RR","socketid" : "1","token" : "5907" }
解决方法
token
字段可能在数据库中存储为字符串,而不是数字。看看逗号。
"token" : "5907"
尝试将 tok
转换为查询中的字符串。
find({'name':check,'token':String(tok)})
,
您可以使用表达式 $expr 条件来确保 100% 的任何标记的类型为字符串或数字,
-
$toInt
将字符串转换为数字
var check = request.body.cookie; // String
var tok = request.body.token; // It's a number
db.collection("users").find({
$and: [
{ name: check },{
$expr: {
$eq: [{ $toInt: "$token" },tok]
}
}
]
}).toArray(function(err,rows) {
if(!rows.length)
console.log("No data found");
}
});