{username:'me', companies:{"yourcompany":{...}}
I want to insert a company into a user record (user collection), to make:
{username:'me', companies:{ "yourcompany":{...}, "mycompany":{...} }
But the name is dynamic..
var companyid = "mycompany";
.collection('users').findAndModify(
{username: usern},
[['_id', 'asc']],
{$set:{companies:{companyid: { desksmemberships:[] }}}},
{new: true}, function(){...}
Gives this.. {username:'me', companies:{ "yourcompany":{...}, "companyid":{...} }
How do I do this?
You'd have to build up your $set
modifier programmatically:
var modifier = { $set: {} };
modifier.$set['companies.' + companyid] = { desksmemberships:[] };
And then use modifier
as the third parameter in your findAndModify
call.
You may also want to consider changing companies
to be an array instead of an embedded object.
Node.js 4.x Update
You can now use the computed property syntax to do this directly in the object literal:
collection('users').findAndModify(
{username: usern},
[['_id', 'asc']],
{$set:{['companies.' + companyid]: { desksmemberships:[] }}},
{new: true},
function(){...});