Mam następującą strukturę mojego dokumentu:
{
"daily": [
{
"general": [
{
"status": false,
"_id": "5e728265f4796c0017203662",
"title": "Sport"
},...
]
}
]
}
Chciałbym przeciągnąć dokument do „ogólnej” tablicy według jego „_id”.
Próbowałem kilku rzeczy, ale wydaje mi się, że nic nie działa.
Każda pomoc będzie doceniona :)
2 odpowiedzi
Zapytanie aktualizujące, aby pobrać dokument podrzędny z pola zagnieżdżonej tablicy general
przy użyciu _id
:
ID = "5e728265f4796c0017203662"
db.collection.update(
{ "daily.general._id": ID },
{ $pull: { "daily.$.general": { _id: ID } } }
)
Można to zrobić tylko w Mongo 4.2+, gdzie wprowadzono aktualizacje potoku.
Teraz możemy użyć wyrażeń agregacji do aktualizacji dokumentów:
db.collection.updateOne(
{},
[
{
$set: {
"daily": {
$map: {
input: "$daily",
as: "item",
in: {
"general": {
$filter: {
input: "$$item.general",
as: "datum",
cond: {$ne: ["$$datum._id", "5e728265f4796c0017203662"]}
}
}
}
}
}
}
}
]);
Lub jeśli codzienne obiekty mają więcej niż tylko ogólne pole, możesz to zrobić w ten sposób:
db.collection.updateOne(
{},
[
{
$set: {
"daily": {
$map: {
input: "$daily",
as: "item",
in: {
$mergeObjects: [
"$$item",
{
"general": {
$filter: {
input: "$$item.general",
as: "datum",
cond: {$ne: ["$$datum._id", "5e728265f4796c0017203662"]}
}
}
}
]
}
}
}
}
}
]);
Niestety dla żadnej innej wersji Mongo nie jest to możliwe, będziesz musiał zrestrukturyzować swoje dane lub zrobić to w kodzie.
Podobne 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.