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

Subdocs w mongoose

Aruba Cloud - Virtual Private Server VPS
0 głosów
296 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ź 484 wizyt
pytanie zadane 26 czerwca 2017 w JavaScript przez Bartlomiej Bywalec (2,480 p.)
+1 głos
0 odpowiedzi 121 wizyt
pytanie zadane 20 września 2020 w JavaScript przez poldeeek Mądrala (5,980 p.)
0 głosów
0 odpowiedzi 174 wizyt
pytanie zadane 15 sierpnia 2020 w JavaScript przez Darth_Sith Początkujący (310 p.)

93,337 zapytań

142,332 odpowiedzi

322,423 komentarzy

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...