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

Subdocs w mongoose

Object Storage Arubacloud
0 głosów
192 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ź 303 wizyt
pytanie zadane 26 czerwca 2017 w JavaScript przez Bartlomiej Bywalec (2,480 p.)
+1 głos
0 odpowiedzi 78 wizyt
pytanie zadane 20 września 2020 w JavaScript przez poldeeek Mądrala (5,980 p.)
0 głosów
0 odpowiedzi 127 wizyt
pytanie zadane 15 sierpnia 2020 w JavaScript przez Darth_Sith Początkujący (310 p.)

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 pasjonatów

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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...