MongoDB 查询具有整数值的字段

问题描述

我正在尝试使用字符串和数字作为字段进行查找查询。该查询在单独查找字符串时起作用。我怎样才能让它也适用于数字?

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

Playground

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...