2016-03-27 22 views
0

我在應用下面的模式合併兩個文件的數組中貓鼬

var UserSchema = mongoose.Schema({ 
    email: {type: String, index: {unique: true, sparse: true}}, 
    password: String, 
    createdOn: {type: Date, default:Date.now }, 
    purchaseDate:Date, 
    expiryDate:Date, 
    purchaseID: {type: String, index: {unique: true, sparse: true}}, 

    isEnabled: {type: Boolean,default: true}, 
    devices:[{ 
     type:mongoose.Schema.Types.ObjectId, 
     ref: 'Device' 
    }] 

}); 

var DeviceSchema = mongoose.Schema({ 
    owner : { type:mongoose.Schema.Types.ObjectId, ref: 'User' }, 
    uuid:String, 
    token: String, 
    createdOn: {type: Date, default:Date.now }, 
    lastSeen: Date, 
    isEnabled: {type: Boolean, default:true } 
}); 

比方說,我有以下的用戶

用戶1

{ 
    "_id": ObjectId("56ec014111cb350404e30005"), 
    "purchaseDate": new Date("2015-10-17T17:01:26+0300"), 
    "purchaseID": "570000118683786", 
    "devices": [ 
    ObjectId("56ec016911cb350404e30006") 
    ], 
    "isEnabled": true, 
    "createdOn": new Date(1458307393521), 
    "__v": 1 
} 

用戶2

{ 
    "_id": ObjectId("57ec014111cb350404e30005"), 
    "devices": [ 
    ObjectId("57ec016911cb350404e30006") 
    ], 
    "isEnabled": true, 
    "createdOn": new Date(1458507393521), 
    "__v": 1 
} 

合併d的正確方法是什麼將用戶2的數組設置爲用戶1並徹底擺脫用戶2?

+0

從樣本文件,看來,用戶2已經合併了用戶1。那麼你期望的結果是什麼? – Saleem

+0

用戶1和用戶2是完全不同的兩個文件。我想將用戶2的設備數組合併到用戶1,最後刪除用戶2.我不知道什麼是最好的方式來做到這一點 – Meanteacher

回答

1

你可以獲取用戶1的設備和更新用戶2(假設用戶2已經獲取):

UserModel.findById(user1Id) 
.then(function (user1) { 
    // addToSet will ensure no duplicates in user2.devices 
    user2.devices.addToSet(user1.devices); 
}); 
+0

謝謝。我期待像使用findOneAndUpdate,$ push $ set等,因爲我無法弄清楚它們是如何工作的。再次感謝你的幫助。 – Meanteacher

+0

我們可以通過只有一個查詢來完成否no user2.devices.addToSet(user1.devices); ? –

+0

如果你已經擁有'user1.devices'而不需要讀取'user1'是的。 – Komo