2017-04-26 5 views
1

後は、スキーマで新しいOBJECTIDを作成します - Robomongo出力、これは私のサンプル・データベースがはマングース

Domain.add({ 
    domainName: {type: Types.Text, required: true, initial: true, index: true}, 
    labconfigs :{type: Types.Relationship, ref: 'LabConfig',required: false,many: true}, 
    }); 

Domain.schema.add({ 
    userlevels: { 
    type: [{ 
     labId : String, 
     userlevel: String 
    }] 
    } 
}); 

ある

Domain 
{ 
    "_id" : ObjectId("5900dbdb4bc4c2f82400198c"), 
    "domainName" : "ABC.com", 
    "userlevels" : [ 
     { 
      "labId" : "104", 
      "userlevel" : "true" 
     }, 
     { 
      "labId" : "401", 
      "userlevel" : "false" 
     }, 
     { 
      "labId" : "202", 
      "userlevel" : "true" 
     }, 
     { 
      "labId" : "102", 
      "userlevel" : "true" 
     } 
    ], 
    "labconfigs" : [ 
     ObjectId("5900dbdb4bc4c2f824001986"), 
     ObjectId("5900dbdb4bc4c2f824001987"), 
     ObjectId("5900dbdb4bc4c2f824001988"), 
     ObjectId("5900dbdb4bc4c2f824001989") 
    ], 
    "__v" : 1 
} 

をだから私は単にuserlevelsのための私の文書を更新している何をすべきかフィールド(UserlevelsフィールドはJSONオブジェクトの配列です)。私userlevelsフィールドを更新するには

ので、私はlabPublishedIDsの価値がある$設定

Domain.model.update({_id: req.params.id}, {$set: {"userlevels": userauthlevel.labpublishedIDs}}, function(err, result) { 
         if (err) return res.apiError('database error', err); 

でこれ以下のマングース機能を与えた: -

{ labpublishedIDs: 
    [ { labId: '102', userlevel: 'false' }, 
    { labId: '104', userlevel: 'true' }, 
    { labId: '202', userlevel: 'false' }, 
    { labId: '401', userlevel: 'true' } ] } 

しかし、今、私の更新機能の後に、それは新しいを作成します各Arrayオブジェクトを持つObjectId。 理由を理解できませんでした。おそらく、更新中の値が変更された&新しいObjectIdを作成します。何らかの理由で???ここで

はサンプル出力は、更新機能の後

/* 5 */ 
{ 
    "_id" : ObjectId("5900dbdb4bc4c2f82400198d"), 
    "domainName" : "ABC.com", 
    "userlevels" : [ 
     { 
      "labId" : "102", 
      "userlevel" : "false", 
      "_id" : ObjectId("5900de7ddcbe0a29fd7aaccb") 
     }, 
     { 
      "labId" : "104", 
      "userlevel" : "true", 
      "_id" : ObjectId("5900de7ddcbe0a29fd7aacca") 
     }, 
     { 
      "labId" : "202", 
      "userlevel" : "false", 
      "_id" : ObjectId("5900de7ddcbe0a29fd7aacc9") 
     }, 
     { 
      "labId" : "401", 
      "userlevel" : "true", 
      "_id" : ObjectId("5900de7ddcbe0a29fd7aacc8") 
     } 
    ], 
    "labconfigs" : [ 
     ObjectId("5900dbdb4bc4c2f824001986"), 
     ObjectId("5900dbdb4bc4c2f824001987"), 
     ObjectId("5900dbdb4bc4c2f824001988"), 
     ObjectId("5900dbdb4bc4c2f824001989") 
    ], 
    "__v" : 1 
} 

答えて

0

ですはい、それは私に苦痛を与えるが、最終的には、私は自分自身で解決することができました。 サブドメインにobjectIdを作成しないようにドメインスキーマを更新するだけです。これは、スキーマに_id:falseを追加することで実行できます。それはなぜこれを行いマングースうサブドキュメント 任意の理由でOBJECTIDを追加する理由

Domain.schema.add({ 
    userlevels: { 
    type: [{ 
     _id : false, 
     labId : String, 
     userlevel: String 
    }] 
    } 
}); 

しかし、まだは把握することはできません。