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

92,761 zapytań

141,685 odpowiedzi

320,482 komentarzy

62,105 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

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!

...