user4170419
user4170419

Reputation:

Merge array of two documents in Mongoose

I have following schemas in the app

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 }
});

Let's say I have following users

User 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
}

User 2

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

What is the proper way to merge devices array of User 2 to User 1 and get rid of User 2 completely?

Upvotes: 1

Views: 1353

Answers (1)

Komo
Komo

Reputation: 2138

You could fetch User1's devices and update User2 (assuming User2 is already fetched) :

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

Upvotes: 0

Related Questions