2

私は Twitter 認証を使用しており、mongodb に一意のキーとして Twitter ID を保存したいと考えています。ただし、同じ ID を持つ複数のエントリが表示されます。ここに私のスキーマとコードがあります

スキーマ:

var TwitterSchema = new Schema({
    accessToken: String,
    accessTokenSecret: String,
    name: String,
    twitterId: { type: String, required: true, index: { unique: true, sparse: true } }
});

コード:

        mongoose.connect('mongodb://localhost/twd')
        mongoose.model('Post', TwitterSchema);    
        var Post = mongoose.model('Post');

        var post = new Post();
        post.accessToken = accessToken
        post.accessTokenSecret = accessTokenSecret
        post.name = twitterUserData.name
        post.twitterId = twitterUserData.id

        post.save(function(err){
            if (err){
                throw err;
                promise.fail(err);
             }
            console.log('saved');
            mongoose.disconnect();
        });

        promise.fulfill(post);

DB シェル出力

> db.posts.find();
{ "twitterId" : "21475255", "name" : "MMMK", "accessTokenSecret" : "ZYhiXMWfXvSr1aaCB93hgU243j8aapP0ALdSFlWEE", "accessToken" : "22475255-9YvKMceUInUIxcEtKAK0oMRRG2ZZxn5c52vnwPw", "_id" : ObjectId("4feddf6155203990e000001") }
{ "twitterId" : "21475255", "name" : "MMMK, "accessTokenSecret" : "ZYhiXMWfXvSr1aaCB93hgU2438aapP0ALdSFlWEE", "accessToken" : "22475255-9YvKMceUInUIxcEtKAK0oMRRG2ZZxn5c52vnwPw", "_id" : ObjectId("4feddf7b5905a1a10e000001") }
4

1 に答える 1

1

私の推測では、インデックスがMongoDBで作成されていないか、同じ名前のインデックスがすでに存在しています。すでに存在する場合、マングースはensureIndexそれを作成するために使用しますが、それがすでに存在する場合、それはそれをオーバーライド/再定義しません。mongo jsシェルを使用して存在するかどうかを確認してから、それを削除してmongodを再起動し、node.jsコードを再度実行してみてください。

http://www.mongodb.org/display/DOCS/Indexes#Indexes-CreationOptions

于 2012-06-29T17:23:18.680 に答える