Here is my Schema:
var User = new Schema({
name: {type: String, required: true},
email: {
address: String,
confirmed: Boolean,
confirm_code: String
},
saved_artists: [Schema.ObjectId],
new_releases: [Schema.ObjectId],
sync_queue: {
id: Number,
status: String
}
});
and
var Artist = new Schema({
spotify_id: {type: String, required: true},
name: {type: String, required: true},
recent_release: {type: {
id: String,
title: String,
release_date: String,
images: []
}, required: true},
users_tracking: [Schema.ObjectId]
});
and here is my update query:
User.update({_id: {$in: artist.users_tracking}}, {$addToSet: {'new_releases': artist._id}}, function (err) {
if (err) {
// todo turn into debug report
console.log(err);
}
User.find({}, function (err, users) {
console.log(users);
})
})
When I run a unit test, $in only selects the first _id
of the array and updates that one and ignores any others. The input array looks like this:
["5993864f44456a1b50378bc3","5993864f44456a1b50378bc4"]
and if I run the update query iteratively like below, it outputs correctly:
for (var i =0; i < artist.users_tracking.length; i++){
User.update({'_id': artist.users_tracking[i]}, {$addToSet: {'new_releases': artist._id}}, function(err) {
})
}