2017-12-06 14 views
0

手動で生成されたIDを持つコレクションを設定しようとしています。私たちはIDを使って検索レコードを検索するので、テスターがフィードバックを提供するのを簡単にするためにこれが必要です[とりわけ]。事前に生成されたIDを持つマングースレコードを作成します

私はconstの定義済みのいくつかのキーを持つ配列を定義し、残りの部分はmongooseによって生成されたいと思います。以下は、サンプルデータをデータベースに埋め込むための断片です。

var col = db.collection('clients') 
for (let i = 0; i < count; i++) { 
    var client = createClientRecord() 
    if (cifs.length > i) { 
    client._id = cids[i] 
    } else { 
    client._id = new mongoose.Types.ObjectId 
    } 
    console.log('client._id:', client._id) 

これはうまくいきません。私は配列の中にある数だけレコードを取得します。マングースを生成するとIDが生成されません。コードがちょうどそこに詰まってしまいます。

また、私が定義されて私のschemaとして:

const clientSchema = new mongoose.Schema({ 
    id: {type: String, unique: true, required: true}, 
    email: { type: String, unique: true, required: true }, 
    birthName: String, 
    ... 
}) 

が、これは有効なオプションですか?ユニークなidを手動で作成できますか? idまたは_idである必要がありますか?

アイデア/提案はありますか?

答えて

0

IDを手動で生成する必要はありません。これは、Mongoose によって自動的に行われます。です。スキーマを定義するだけです。それだけです。そして、スキーマに 'id'と '_id'フィールドを指定しないでください。すべてがMongooseによって処理されます。

最後の質問( 'id'または '_id')の '_id'はMongoDBのID(Object ID)ですが、 'id'は '_id'の文字列化されたゲッターです。 'id'と '_id'は類似していますが、タイプの違いがあります。 'id'は文字列です。 '_id'はオブジェクトIDなので、次の条件があります。それらは値によって等しくなりますが、型によっては等しくありません。

独自のIDを設定することができますが、デフォルトでは上で説明したように機能します。私はコーディングてるアプリでこれを行う http://mongoosejs.com/docs/guide.html#id

0

このリンクに従ってください。最初にIDを生成し、それをデータベースに送る前に作成したいオブジェクトに割り当てます。私がしていることがここにあります:

const generatedId = mongooTypes.ObjectId(); 

const newItem = { 
    _id: generatedId, 
    name: name, 
    description: description 
}; 

Items.create(newItem).then((item) => { 
    // Here you can check that generatedId and item._id are the same 
    if (item._id.equals(generatedId)) { console.log('Created item with pre-generated ID'); } 
}) 
関連する問題