2016-09-19 3 views
1

Я пытаюсь найти, имеет ли моя коллекция запись с profilename = john, и если она существует, я возвращаю status success, если else я возвращаю сбой, но в моем случае он возвращает успех для обоих случаев . Я новичок в узле и монго, может кто-нибудь мне помочь.Как найти запись в MongoDB с помощью Node.js

Моя функция,

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

ответ

0

Попробуйте Debug. тип результата массива, поэтому постарайтесь, чтобы проверить длину этого:

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

Если ваш 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); 
    }); 
}; 
+0

Вот что я тоже думал. Но документация была не совсем понятна в отношении свойств курсоров. Спасибо за объяснение. –

-1

Попробуйте

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) 

    }); 
+0

@downvoter, пожалуйста, определите, что случилось в ответ ?? –

1

Если вы только проверяете, существует ли запись, вы должны быть в состоянии сделать это с помощью метода 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.collection.find/

0

Я думаю, что в вашем case, req.params.id - это строка, например '123', но в вашем поле профиля mongodb хранится как Number.

Таким образом, вы можете попробовать это:

изменение {profilename:params.id} в {profilename:parseInt(params.id)}

1

Я очистил его, изменив find({}) на findOne({}), спасибо каждый.

Смежные вопросы