繁体   English   中英

如何使用 Node.js 在 MongoDB 中查找记录

[英]How to find a record in MongoDB using Node.js

我试图找出我的收藏是否有一个profilename = john的记录,如果存在,我返回status success ,否则我返回失败,但在我的情况下,它在两种情况下都返回成功。我是 node 的新手,mongo 可以任何人帮我。

我的功能,

    exports.searchprofilename = function (req, res) {
  var params = req.params;console.log(req.params.id);
  var record= db.collection('profile');
   record.find({profilename:params.id}, (err, result) => {
   if (err){ return console.log(err)
    }
      if(!result){
            data = {status:'success'};
        } else{
             data = {status:'profile name already exists'};
        }
      res.send(data);
  });
};

如果您只是检查记录是否存在,您应该可以轻松地使用 db.collection.count() 方法并检查记录数是否为 0。

https://docs.mongodb.com/manual/reference/method/db.collection.count/

老实说,我是 mongodb 的新手,我仍然无法理解游标的概念,它是 db.collection.find() 的返回类型,如https://docs.mongodb.com/manual/reference/method/db。集合.find/

我通过将find({})更改为findOne({})来清除它,谢谢大家。

如果您的query matches则表示您有record然后返回Success

 exports.searchprofilename = function (req, res) {
  var params = req.params;console.log(req.params.id);
  var record= db.collection('profile');
   record.find({profilename:params.id}, (err, result) => {
   if (err){ return console.log(err)
    }
    // If record exist then return 'Success'
      if(result.length>0){
            data = {status:'success'};
        } else{
             data = {status:'profile name already exists'};
        }
      res.send(data);
  });
};

尝试这个

    exports.searchprofilename = function (req, res) {
        console.log("PARAMS",req.params.id);
        var data = {};
        profile.findOne( {profilename:req.params.id} , function (err, fetchDataObj) {
                if (err) {
                    console.log(err)
                   return err;
                } else {
                    data.status = 'success';
                    data.result = fetchDataObj;
                    return data;
                }
            }).lean(true)

  });

我认为在您的情况下, req.params.id是一个字符串,例如“123”,但在您的 mongodb profilename 字段中存储为一个数字。

所以你可以试试这个:

{profilename:params.id}更改为{profilename:parseInt(params.id)}

尝试调试。 结果的类型是数组,所以尝试检查它的长度:

if(result.length==0){
    data = {status:'success'};
} else{
    data = {status:'profile name already exists'};
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM