2017-02-20 7 views
0

Я хочу использовать findOne() на Mongoose, чтобы найти ObjectId в Twitter JSON учетные данные из учетной записи Twitter.Используйте FindOne с Mongoose, чтобы найти ObjectId в JSON

Я использую следующую схему и код:

var userSchema = new Schema({ 
    provider: String, 
    name: String, 
    email: String, 
    username: String, 
    twitter: JSON 
}); 

User.findOne({ 
    'twitter.id_str': 123 
}, function (err, user) { 
    if (err) { 
     return done(err); 
    } 
    if (!user) { 
     user = new User({ 
      name: 'Full Name', 
      email: '[email protected]', 
      username: 'pseudo', 
      provider: 'twitter', 
      twitter: { id_str: 123 } 
     }); 
     user.save(function (err) { 
      if (err) console.log(err); 
      console.log(user); 
     }); 
    } else { 
     console.log(user); 
    } 
}); 
+0

Является ли Twitter 'id_str' в Монго/Мангуст Идентификатор объекта или это идентификатор пользователя Twitter? В любом случае, если вы собираетесь искать на поле, вы сбережете себе головную боль, чтобы более точно моделировать его в своей схеме. Вместо 'JSON' используйте тип данных каждого поля в объекте. –

+0

Это профиль идентификатора Twitter. Я использую этот ключ в твиттере. –

ответ

0

Изменения вашей схему либо:

var userSchema = new Schema({ 
    provider: String, 
    name: String, 
    email: String, 
    username: String, 
    twitterId: { type: Number, unique: true } 
}); 

или

var userSchema = new Schema({ 
    provider: String, 
    name: String, 
    email: String, 
    username: String, 
    twitter: { id: { type: Number, unique: true } } 
}); 

Второй больше похож на текущую настройку. Если вы используете эту схему, поиска кода может быть findOne с дополнительным upsert флагом на findOneAndUpdate():

User.findOneAndUpdate({ 
    'twitter.id_str': 123 
}, { 
    name: 'Full Name', 
    email: '[email protected]', 
    username: 'pseudo', 
    provider: 'twitter', 
    twitter: { id_str: 123 } 
}, { 
    upsert: true 
}, function (err, user) { 
    if (err) { 
     return done(err); 
    } else { 
     console.log(user); 
    } 
}); 

Смотрите здесь еще один пример использования: How do I update/upsert a document in Mongoose?

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

  • Нет связанных вопросов^_^