• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Subdocs w mongoose

0 głosów
403 wizyt
pytanie zadane 22 stycznia 2018 w JavaScript przez Anoonymous Obywatel (1,560 p.)

Niestety, ale subdokument w moongose nie działa i nie bardzo wiem dlaczego:

...
mongoose.connect('mongodb://zzz@xxx.ccc.com:59676/zxcv');
var Schema = mongoose.Schema;

var entrySchema = Schema({
    title: String,
    img: String,
    info: String,
    link: String
}, {collection: 'xxx'});

var userDataSchema = Schema({
  name: String,
  password: { type: String, select: false},
  birth: Number,
  followers: [{ "name": String}],
  entry: [entrySchema]
}, {collection: 'yyy'});

var UserData = mongoose.model('UserData', userDataSchema);
var entry = mongoose.model('entry', entrySchema);

app.get('/:user', function(req, res) {
    UserData.findOne( {'name': req.params.user}, function(err, user) {
        if (err)
            res.send(err);
        res.json(user);
    });
});

Owy kod zwraca dane ze schematu userDataSchema oraz pusty entry: []

Jestem w stanie odpytać osobno userDataSchema oraz entrySchema i zwracają poprawne dane, jednak nie działa to razem. Gdzie popełniam błąd?

1 odpowiedź

0 głosów
odpowiedź 22 stycznia 2018 przez Ivan Maniak (60,650 p.)
komentarz 22 stycznia 2018 przez Anoonymous Obywatel (1,560 p.)
muszę użyć populate? czy nie jest to osobna funkcja? Finalnie chciałbym, aby mongoose dokleił w wyniku do entry dane ze wszystkich kolekcji o nazwie z followers.
1
komentarz 22 stycznia 2018 przez Ivan Maniak (60,650 p.)
Spróbuj osiągnąć taki efekt jak na przykładzie.

http://mongoosejs.com/docs/populate.html#population

userData to dla ciebie Story, a person to entry
komentarz 22 stycznia 2018 przez Anoonymous Obywatel (1,560 p.)
var userDataSchema = Schema({
  name: String,
  password: { type: String, select: false},
  birth: Number,
  followers: [{ "name": String}],
  entry: [{ type: Schema.Types.ObjectId, ref: 'entry' }],
}, {collection: 'xxxx'});

var entrySchema = Schema({
  _id: Schema.Types.ObjectId,
  title: {type: String},
  img: {type: String},
  info: {type: String},
  link: {type: String},
}, {collection: 'yyy'});



var UserData = mongoose.model('UserData', userDataSchema);
var entry = mongoose.model('entry', entrySchema);

Jak powinno to wyglądać? Efekt jest ten sam.

komentarz 22 stycznia 2018 przez Ivan Maniak (60,650 p.)
A dodajesz .populate tak jak w dokumentacji?
komentarz 22 stycznia 2018 przez Anoonymous Obywatel (1,560 p.)
app.get('/entry/:user', async (req, res) => {
  await UserData.findOne({'name': req.params.user})
    .populate('entry')
    .exec(function (err, story) {
      if (err) return handleError(err);

      res.json(story);
    });
});
komentarz 23 stycznia 2018 przez Anoonymous Obywatel (1,560 p.)

@Ivan, Może inaczej. Czy populate nie spowoduje 'przypisanie' zawartości z ID drugiej kolekcji? Zależy mi na Wstrzyknięciu całej kolekcji o danej nazwie (kolekcja w kolekcji), czy nie ma innej możliwości?

Podobne pytania

0 głosów
1 odpowiedź 601 wizyt
pytanie zadane 26 czerwca 2017 w JavaScript przez Bartlomiej Bywalec (2,480 p.)
+1 głos
0 odpowiedzi 199 wizyt
pytanie zadane 20 września 2020 w JavaScript przez poldeeek Mądrala (5,980 p.)
0 głosów
0 odpowiedzi 282 wizyt
pytanie zadane 15 sierpnia 2020 w JavaScript przez Darth_Sith Początkujący (310 p.)

93,633 zapytań

142,558 odpowiedzi

323,058 komentarzy

63,142 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...