11

を呼び出したいensureIndexauthorNameですが、コマンドは何ですか?このコードのどこに配置すればよいですか?

var mongoose = require('mongoose');

// defines the database schema for this object
var schema = mongoose.Schema({
    projectName : String,
    authorName : String,
    comment : [{
        id : String,                                    
        authorName : String,
        authorEmailAddress : { type : String, index : true }    
    }]
});

// Sets the schema for model
var ProjectModel = mongoose.model('Project', schema);

// Create a project
exports.create = function (projectJSON) {
    var project = new ProjectModel({
        projectName : projectJSON.projectName,
        authorName : projectJSON.authorName,    

        comment : [{
            id : projectJSON.comments.id,                                           
            authorName : projectJSON.comments.authorName,                           
            authorEmailAddress : projectJSON.authorEmailAddress
        });

        project.save(function(err) {
            if (err) {
                console.log(err);
            } else{
                console.log("success");
            }
        });
    });
}
4

5 に答える 5

31

直接呼び出すのではなくensureIndex、次のようにスキーマでフィールドにインデックスを付ける必要があることを示します。

var schema = mongoose.Schema({
  projectName : String,
  authorName : { type: String, index: true }
});

その定義に基づいて、呼び出しensureIndexを介してモデルを登録すると、Mongoose が呼び出しmongoose.modelます。

Mongoose が行っている呼び出しを確認するにensureIndexは、コードに以下を追加してデバッグ出力を有効にします。

mongoose.set('debug', true);
于 2012-11-07T15:38:39.407 に答える
14

次のステートメントを使用できます。

mongoose.connection.collections['my_collection'].ensureIndex({ "key": 1 }, { "unique": true }, callback);

たとえば、いくつかの統合テストを実行したい場合は、コレクションを迅速にドロップする必要があります。その場合、オプションautoIndexが に設定されていても、マングースは実行時にインデックスを再設定しませんtrue。この回答は、その場合に役立ちます。

于 2014-11-14T13:14:58.127 に答える
1

最初に authorName フィールドにインデックスを定義し、特定の要件のために手動で ensureIndex を呼び出したい場合は、autoIndex を falseに設定する必要があります。スキーマは次のようになります。

var schema = mongoose.Schema({
    projectName : String,
    authorName : {type : String, index : true}
    comment : [{
        id : String,                                    
        authorName : String,
        authorEmailAddress : { type : String, index : true }    
    }]
}, {
     // Turn-off auto indexing, we manually need to trigger indexing 
     autoIndex : false 
});

また、要件に基づいて、このスキーマを使用して作成したモデルで ensureIndexes メソッド、つまり ProjectModel.ensureIndexes();を呼び出すことができます。

于 2016-03-24T19:52:13.720 に答える