sql >> Databáze >  >> NoSQL >> MongoDB

Jak vrátit vnořené dokumenty z objektu v poli pomocí Meteor a MongoDB

!VYŘEŠENO!

Problém je v tom, že jsem nevěděl, co znamená balíček aldeed:collection2 dělal s mým kódem. Tento balíček jsem přidal pro použití OrionJS (zde je stránka github ). A nevšiml jsem si, že tento aldeed:collection2 vynutil ověření všech mých aktualizací. Už jsem na to narážel, ale vypisovalo mi to chybu. V minulosti jsem byl schopen vysledovat chybu. Tentokrát k žádné chybě kdekoli. Aktualizovalo by to pole, ale s prázdným objektem. Tak matoucí. Chystám se zveřejnit problém na aldeed:collection2 stránka projektu uživatele.

Z dokumentace projektu :"[aldeed:collection2 je] balíček Meteor, který vám umožňuje připojit schéma k Mongo.Collection. Při vkládání a aktualizaci se automaticky ověřuje podle tohoto schématu z kódu klienta nebo serveru."

dokumentace pro opravu naleznete zde .

Řešení:

Protože používám aldeed:simple-schema a aldeed:collection2 Potřebuji se ujistit, že ke své sbírce připojím správné „Schéma“.

Like So:

Ideas.attachSchema(new SimpleSchema({
  // ... a bunch of other schema data

  // I was missing this:
  score: {
    type: [Object],
    optional: true,
    label: 'Score',
  },
  "score.$.userId": {
    type: String,
    optional: true,
    label: 'Score'
  },
  "score.$.score": {
    type: String,
    optional: true,
    label: 'Score'
  }

  // ... a bunch more schema data
});

Odstraňování problémů:

Jak jsem na to přišel?

No, jsem v MongoDB nový - takže jsem se zdráhal jít do konzole a zkusit provést aktualizaci odtamtud. Ve skutečnosti mě to ani nenapadlo, dokud jsem nemluvil se svou ženou.

Vyzkoušel jsem všechno, přidal jsem uvozovky kolem všeho , při pohledu na kód jiných lidí. Zkontroloval jsem veškerou vynikající dokumentaci MongoDB. Díval jsem se na videa na youtube. Podíval jsem se na další řešení stackoverflow.com. Nakonec mě napadlo, že kód všech ostatních vypadá přesně jako můj kód a tohle by prostě mělo FUNGOVAT. Dokonce jsem se zaregistroval na Clarity.fm položit otázku od Sacha Greif za 1 $ za minutu.

... začínal jsem si myslet, že moje mongo databáze nefunguje. Možná moje mongo instalace byla přerušena?

Tak jo, na to je test... Po dvou dnech tohoto mučení mi to konečně došlo - Jen zkuste aktualizaci v mongo konzoli... (duh)

meteor:PRIMARY> db.ideas.update({_id:"DqEGjK3xSTBdpEgXa"}, {$addToSet: {score: {userId: "123456", score: 1}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
meteor:PRIMARY> db.ideas.find()
{
  "_id" : "DqEGjK3xSTBdpEgXa",
  "title" : "Revive Randolf With Bloodmagic",
  "body" : "Bring Randolf back from the dead using witche's bloodmagic.",
  "userId" : "Rz28ByKYM4Y8futFb",
  "author" : "Iryna Iglehart",
  "episodeId" : "iQaxyLPi5iaYtQngf",
  "timestamp" : ISODate("2016-06-08T17:37:57.237Z"),
  "score" : [
    {
      "userId" : "123456",
      "score" : 1
    }
  ],
  "overallScore" : 0,
  "votedOnBy" : [ ],
  "timesVotedOn" : 0
}

Jakmile jsem věděl, že mongo MŮŽE provést aktualizaci – věděl jsem problém musel být s mým nastavením meteoru. Už bych našel problém na meteoru, kdyby to byl problém. Prohledal jsem každý temný kout Googlu a snažil jsem se přijít na tohle.

Netrvalo dlouho a vzpomněl jsem si, že jsem měl divný problémy s ověřením dříve. Kromě těchto problémů s ověřením vždy přicházely s chybou. Skutečnost, že nedošlo k žádné chybě a pole bylo jednoduše aktualizováno prázdnými objekty, mě opravdu vrhlo na smyčku.

Co jsem se naučil:

  1. Pokud meteor selže napoprvé, vyzkoušejte konzolu mongo...
  2. Podle @David Weldon Komentář uživatele - další dobrá technika ladění, která by mi pomohla a kterou jsem mohl vyzkoušet už dávno, je spustit nový meteorický projekt a otestovat tam svůj kód, pak přidávat balíčky jeden po druhém a zjistit, kdy to/jestli kterýkoli z nich poruší kód. Tento test by poukázal na to, že kód byl v zásadě správný a potřeboval pouze připojené schéma kvůli přidanému balíčku.
  3. Nepřidávejte slepě balíčky. Pochopte, zda/kdy balíčky mění tok vývoje, jako je aldeed:collection2

Děkuji:

VELKÉ DÍKY @Michel Floyd a @David Weldon za veškerou vaši pomoc s tímto problémem.

Důležité odkazy:

  1. Docela jsem se naučil z častých chyb napsal @David Weldon
  2. dokumentace pro aldeed:collection2
  3. dokumentace pro aldeed:simple-schema
  4. Vyhledejte „Finding Data“ v tomto meteorologickém kurzu - mluví o fetch() a o tom, jak je užitečné. To mi pomohlo při řešení tohoto problému.
  5. Prostudujte si dokumentaci o aktualizaci z MongoDB
  6. Dokumentace MongoDB $addToSet
  7. Dokumentace MongoDB $push
  8. [Příkladová kolekce MongoDB Bios](https://docs .mongodb.com/manual/reference/bios-example-collection/] - Když jsem se podíval na dokumenty, jako je tento, opravdu jsem zjistil, že na mém návrhu databáze není nic špatného, ​​MĚL BY po celou dobu existovat způsob, jak to udělat (a samozřejmě existuje)

Související otázka:

[Vyřešeno] Jak aktualizovat pole dílčích dokumentů ve sbírce MongoDB v MeteorJS




  1. Jak importovat pouze neexistující dokumenty?

  2. Použití StackExchange.Redis v ASP.NET Core Controller

  3. Jak uložit seřazenou sadu objektů v redis?

  4. Možný dotaz s MongoDB