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

Subdocs w mongoose

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
155 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,970 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,970 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,970 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ź 189 wizyt
pytanie zadane 26 czerwca 2017 w JavaScript przez Bartlomiej Bywalec (2,480 p.)
+1 głos
0 odpowiedzi 57 wizyt
pytanie zadane 20 września 2020 w JavaScript przez poldeeek Mądrala (5,990 p.)
0 głosów
0 odpowiedzi 89 wizyt
pytanie zadane 15 sierpnia 2020 w JavaScript przez Darth_Sith Początkujący (310 p.)

90,816 zapytań

139,494 odpowiedzi

313,557 komentarzy

60,313 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...