MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да върнете поддокументи от обект в масив с Meteor и MongoDB

!РЕШЕНО!

Проблемът тук е, че не знаех какъв е пакетът aldeed:collection2 правеше на моя код. Добавих този пакет, за да използвам OrionJS (ето страницата в github ). И не забелязах, че този aldeed:collection2 налагаше валидиране на всички мои актуализации. Срещах това и преди, но ми даваше грешка. В миналото успях да проследя грешката. Този път няма грешка навсякъде. Това ще актуализира масива, но с празен обект. Толкова объркващо. Ще публикувам проблем на aldeed:collection2 страницата на проекта на.

От документацията на проекта :"[aldeed:collection2 е] пакет Meteor, който ви позволява да прикачите схема към Mongo.Collection. Автоматично проверява спрямо тази схема при вмъкване и актуализиране от клиентски или сървърен код."

документация за корекцията можете да намерите тук .

Решение:

Тъй като използвам aldeed:simple-schema и aldeed:collection2 Трябва да се уверя, че прикача правилна „Схема“ към моята колекция.

Така например:

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
});

Отстраняване на неизправности:

Как разбрах това?

Е, аз съм нов в MongoDB - така че нямах желание да отида до конзолата и просто да се опитам да направя актуализацията от там. Всъщност това дори не ми хрумна, докато не разговарях с жена си.

Опитах всичко, добавяйки кавички около всичко , гледайки кода на други хора. Проверих цялата отлична документация на MongoDB. Гледах видеоклипове в youtube. Разгледах други решения на stackoverflow.com. Накрая ми хрумна, че кодът на всички останали изглежда точно като моя код и това просто трябва да РАБОТИ. Дори се регистрирах в Clarity.fm да зададете въпрос от Sacha Greif за $1 на минута.

... Започвах да си мисля, че моята mongo база данни не работи. Може би моето монго инсталацията беше повредена?

Така че, добре, има тест за това... След два дни на това мъчение най-накрая ми хрумна - Просто опитайте актуализацията в конзолата mongo... (дух)

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
}

След като разбрах, че mongo МОЖЕ да направи моята актуализация - знаех проблемът трябваше да бъде с настройката ми за метеор. Досега щях да съм намерил проблем с meteor, ако това беше проблем. Претърсих всеки тъмен ъгъл на Google, опитвайки се да разбера това.

Не след дълго си спомних, че се държах странно проблеми с валидирането преди. Освен че тези проблеми с валидирането винаги идват с грешка. Фактът, че нямаше грешка и масивът беше просто актуализиран с празни обекти, наистина ме хвърли в цикъл.

Какво научих:

  1. Ако първият meteor се провали, опитайте конзолата mongo...
  2. Съгласно @David Weldon коментар на - друга добра техника за отстраняване на грешки, която би ми помогнала, която можех да опитам преди много време, е да стартирам нов метеорен проект и да тествам кода си там, след това да добавя пакети един по един и да видя кога/ако някой от тях наруши кода. Този тест щеше да покаже, че по принцип кодът е правилен и се нуждае само от прикачената схема поради добавен пакет.
  3. Не добавяйте сляпо пакети. Разберете дали/кога пакетите променят потока на разработка като aldeed:collection2

Благодаря ви:

ГОЛЯМО БЛАГОДАРЯ на @Michel Floyd и @David Weldon за цялата ви помощ по този проблем.

Важни връзки:

  1. Научих доста от често срещани грешки написано от @David Weldon
  2. документацията за aldeed:collection2
  3. документацията за aldeed:simple-schema
  4. Потърсете „Намиране на данни“ в този урок за метеор - говори за fetch() и как е полезно. Това ми помогна по време на отстраняването ми на този проблем.
  5. Преглед на документация относно актуализацията от MongoDB
  6. Документация за MongoDB $addToSet
  7. Документация за MongoDB $push
  8. [Примерна колекция от MongoDB Bios](https://docs .mongodb.com/manual/reference/bios-example-collection/] - След като разгледах документи като този, наистина разбрах, че няма нищо лошо в дизайна на моята база данни, ТРЯБВАШЕ да има начин да направя това през цялото време (и очевидно има)

Свързан въпрос:

[Решено] Как да актуализирате масив от поддокументи в MongoDB колекция в MeteorJS




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose:Прехвърлянето към ObjectId не бе успешно за стойност

  2. Mongodb не стартира в ubuntu

  3. MongoDB Kafka Sink Connector не обработва процесора RenameByRegex

  4. Как да групирате в агрегат, но също така да показвате други полета с помощта на Mongo?

  5. Услугата „MongoDB сървър“ (MongoDB) не успя да стартира. Проверете дали имате достатъчно права за стартиране на системни услуги