Обновление MongoDB, если пользователь не существует - PullRequest
0 голосов
/ 07 мая 2018

У меня проблема с обновлением пользователя, если его / ее имя отсутствует в моей базе данных

Я подумал, что если моя функция "User.findOne" не найдет пользователя в моем mongodb, он сможет обновить базу данных. К сожалению, ничего не происходит. Я получаю только вывод "Привет, Анна, ты здесь новенький!" Мое имя не сохранено в моем mongodb

Может ли кто-нибудь умный дать мне совет, как мне сохранить имя пользователя, если его нет в моей базе данных

var User = require('./user');
var myName = this.event.request.intent.slots.first_name.value;
self = this;

User.findOne({ name: myName }, function(err, user) {
    if (err ||!user){
        var userSave = new User({
            name: myName
        });

        userSave.save(function (err, results) {
            console.log(results);
            self.emit(':ask',
                "Hello "+ myName +"you are new here!")
        });

    }
    else {
        self.emit(':ask',
            "Hello "+ myName +" you are not new!")
    }

});

Код модели моего мангуста:

//user.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

mongoose.connect("mongodb://c******mlab.com:***/users");

var userSchema = new Schema({
    name: String,
    userId: { type: String, required: false, unique: true }
});

var User = mongoose.model('User', userSchema);


module.exports = User;

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Строка if (err || !user) сбивает с толку, и в этом стиле вы смешиваете обработку ошибок (if (err)) и условие в вашем коде, которое вы ожидаете выполнить (if (!user)). Я предлагаю вам разделить их, чтобы код был проще для чтения и отладки.

Например, используя обычный Javascript и драйвер узла MongoDB:

var MongoClient = require('mongodb').MongoClient;

MongoClient.connect('mongodb://localhost/test', function(err, conn) {

    // connection error handling
    if (err) {
        console.log('Connection error: ' + err);
    }
    conn.db('test').collection('test').findOne({name:'abc'}, function(err, doc) {
        // findOne error handling
        if (err) {
            console.log('Error: ' + err);
        }

        // if document exists
        if (doc) {
            console.log('Document found: ' + JSON.stringify(doc));
        }

        // if document doesn't exist
        else {
            console.log('Document not found');
        }
        conn.close();
    });
});

Если база данных содержит пользователя abc, результат будет:

$ node script.js
Document not found

Если пользователь abc существует:

$ node script.js
Document found: {"_id":0,"name":"abc"}

Я полагаю, используя подобный шаблон, вы можете изменить свой код, чтобы сделать то, что вам нужно.

0 голосов
/ 07 мая 2018
var User = require('./user');
var myName = this.event.request.intent.slots.first_name.value;
self = this;

User.findOne({
  name: myName
}, (err, user) => {
  if(err) throw err;
  if(user) {
    self.emit(':ask', `Hello ${myName} you are not new`);
  } else {
    User.create({
      name: myName
    }, (err, result) => {
      if(err) throw err;
      console.log(result);
      self.emit(':ask', `Hello ${myName} you are new here!`);
    })
  }
});

это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...