I’d like to do something like what .updateMany(query, { $unset: { field1: 1, field2: 1 } })
does
const u1 = new ObjectId(), u2 = new ObjectId(), u3 = new ObjectId();
await conn.collection('a').insertMany([
{ bid: u1, name: 'A', deleted: true },
{ bid: u2, name: 'B' },
{ bid: u3, name: 'C' },
])
await conn.collection('b').insertMany([
{ _id: u1, name: 'A2', deleted: true },
{ _id: u2, name: 'B2', deleted: true },
{ _id: u3, name: 'C2' },
])
await conn.collection('a').aggregate([
{ $replaceRoot: { newRoot: { _id: '$bid', name: '$name', deleted: '$$REMOVE' } } }, // tried this
{ $unset: ['deleted'] }, // and tried this
{ $merge: { into: 'b', whenNotMatched: 'discard' } },
]).toArray();
console.log(await conn.collection('b').find().toArray());
/*
[
{ _id: new ObjectId('67c9a68418c34651a785b05e'), name: 'A', deleted: true},
{ _id: new ObjectId('67c9a68418c34651a785b05f'), name: 'B', deleted: true },
{ _id: new ObjectId('67c9a68418c34651a785b060'), name: 'C' }
]
*/
I’d like the field deleted
to be removed in the output in collection b, what am I missing?
- I think $$REMOVE is not supported there maybe? (docs says it’s supported only in $addFields and $project)
- $unset should work?