{nazwa użytkownika:'ja', firmy:{"twojafirma":{...}}
Chcę wstawić firmę do rekordu użytkownika (zbiór użytkowników), aby:
{nazwa użytkownika:'ja', firmy:{ "twojafirma":{...}, "mojafirma":{...} }
Ale nazwa jest dynamiczna..
var companyid = "mycompany";
.collection('users').findAndModify(
{username: usern},
[['_id', 'asc']],
{$set:{companies:{companyid: { desksmemberships:[] }}}},
{new: true}, function(){...}
Daje to... {nazwa użytkownika:'ja', firmy:{ "twojafirma":{...}, "identyfikator firmy":{...} }
Jak mam to zrobic?
2 odpowiedzi
Musisz programowo zbudować modyfikator $set
:
var modifier = { $set: {} };
modifier.$set['companies.' + companyid] = { desksmemberships:[] };
A następnie użyj modifier
jako trzeciego parametru w wywołaniu findAndModify
.
Możesz również rozważyć zmianę companies
na tablicę zamiast osadzonego obiektu.
Aktualizacja Node.js 4.x
Możesz teraz korzystać z właściwości obliczanej składnia, aby zrobić to bezpośrednio w literale obiektowym:
collection('users').findAndModify(
{username: usern},
[['_id', 'asc']],
{$set:{['companies.' + companyid]: { desksmemberships:[] }}},
{new: true},
function(){...});
Widziałem to pytanie w wielu postach, niektóre z nich są dość skomplikowane - nazwij mnie szalonym, ale możesz to zrobić (node + mongo):
Mój schemat bazy danych "pasuje" jest ustawiony na tablicę. W danych mongo [match.matchId] staje się „2028856183”.
db.update({key: value}, {matches: [{[match.matchId] : match}] }, callback);
db.update(what to find, what to change it to, what to do next)
Możesz użyć dowolnej zmiennej w nawiasach.
Podobne pytania
Powiązane pytania
Nowe pytania
node.js
Node.js to oparte na zdarzeniach, nieblokujące, asynchroniczne środowisko wykonawcze we / wy, które korzysta z silnika JavaScript V8 firmy Google i biblioteki libuv. Służy do tworzenia aplikacji, które w dużym stopniu wykorzystują możliwość uruchamiania JavaScript zarówno po stronie klienta, jak i po stronie serwera, a zatem korzystają z możliwości ponownego wykorzystania kodu i braku przełączania kontekstów.