2017-02-20 2 views
0

findOne()をMongooseで使用して、TwitterアカウントからObjectIdを検索してください。FindOne with Mongooseを使用してJSONでObjectIdを見つけよう

私は次のスキーマとコード使用しています:に

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'オブジェクトIDまたはそれはTwitterのユーザーIDですか?いずれにしても、フィールドで検索する場合は、スキーマ内でより具体的にモデル化する頭痛を覚悟してください。 'JSON'の代わりに、オブジェクトの各フィールドのデータ型を使用します。 –

+0

Twitter IDのプロフィールです。私はこれをツイッターキーで保存しています。 –

答えて

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

第二は、よりあなたの現在の設定のようなものです。

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

使用方法の別の例は、ここを参照してください:あなたがそのスキーマを使用している場合は、検索コードがfindOneAndUpdate()に、オプションのupsertフラグでfindOne可能性がありHow do I update/upsert a document in Mongoose?

関連する問題