web-dev-qa-db-ja.com

.find()mongooseで何も見つからない場合は何かをしてください

Mongodbにデータを保存し、js/nodejsとmongooseを使用してアクセスしています。 .find()を使用して、データベース内の何かを問題なく見つけることができます。これは問題ではありません。問題は、何かない場合は別のことをしたいということです。現在、これは私が試しているものです:

UserModel.find({ nick: act.params }, function (err, users) {
  if (err) { console.log(err) };
  users.forEach(function (user) {
    if (user.nick === null) {
      console.log('null');
    } else if (user.nick === undefined) {
      console.log('undefined');
    } else if (user.nick === '') {
      console.log('empty');
    } else {
      console.log(user.nick);
    }
  });
});

Act.paramsがニックインデックスに含まれていない場所で何かを実行すると、これらのいずれも起動しません。これが発生した場合、コンソールには何も表示されませんが、実際にuser.nickにログが記録されるようにします。私はちょうどこのように逆にそれをやろうとしました:

UserModel.find({ nick: act.params }, function (err, users) {
  if (err) { console.log('noooope') };
  users.forEach(function (user) {
    if (user.nick !== '') {
      console.log('null');
    } else {
      console.log('nope');
    }
  });
});

しかし、これはまだnopeを記録しませんでした。ここに何が欠けていますか?

それが見つからない場合は、find呼び出しのすべてをスキップします。これは問題ありませんが、見つからない場合は後で行う必要があることを除いては問題ありません。 :/

32
Rob

一致するものがない場合、find()は[]を返し、findOne()はnullを返します。どちらかを使用します:

Model.find( {...}, function (err, results) {
    if (err) { ... }
    if (!results.length) {
        // do stuff here
    }
}

または:

Model.findOne( {...}, function (err, result) {
    if (err) { ... }
    if (!result) {
        // do stuff here
    }
}
82
weiyin
UserModel.find({ nick: act.params }, function (err, users) {
  if (err) { console.log(err) };
  if (!users.length) { //do stuff here };
  else {
    users.forEach(function (user) {
      console.log(user.nick);
    });
  }
});

私が働くことがわかったものです。

9
Rob

私は使用しなければなりませんでした:

 if(!users.length) { //etc }

動作するようにします。

5

res.send(data)またはconsole.log(data)を使用した後、コードは[]またはempty log/ empty res.sendこのコードを試してください:

if (data === null) {
        console.log('record does not exist')
        // or do something
    }

私のプロジェクトの例

router.post('/updated-data', (req, res, next) => {

const userName = req.body.userName;
const newUserName = req.body.newUserName;


User.findOneAndUpdate({userName: userName}, {userName: newUserName}, {new: true}, (err, data) => {

    if (err) {
        console.log(err)
    } else if (data === null || !data) {
        res.send('kullanıcı bulunamadı')
    } else {
        console.log(newUserName)
        res.send(data)
    }
})

注:他の例がより役立つ場合があります。

0
emrearabaci