заполнить поля вложенного объекта в схеме мангуста - PullRequest
0 голосов
/ 05 мая 2018

У меня есть эти две модели

var postSchema = new Schema({
  content : String,
  author : [{
    user : {
    type: Schema.ObjectId,
    ref: 'user'
    },
    bool: Boolean
  }]
});


var userSchema = new Schema({
  name : String
});

Я пытаюсь заполнить сообщение именем пользователя вместо того, чтобы просто показывать [объект] или идентификатор, если я .toString его

что я получаю в данный момент:

{ author: [ [Object], [Object], [Object] ],
    _id: 5aedc4d3c534213279faec79,
    content: 'hello',
    __v: 0 } ]

с .toString () я получаю

{ author: 
   [ { _id: 5aedc364ce3b022d4ff74922,
       user: 5aedb9e47e055d1ac26aa572,
       bool: true } ]

что я хочу:

{ author: 
   [ { _id: 5aedc4d3c534213279faec7c,
       user: "Some name here", //( name instead of user _id )
       bool: true },
     { _id: 5aedc4d3c534213279faec7b,
       user: "Some name here",
       bool: false },
     { _id: 5aedc4d3c534213279faec7a,
       user: "Some name here",
       bool: true } ],
  _id: 5aedc4d3c534213279faec79,
  content: 'hello',
  __v: 0 }

это возможно?

1 Ответ

0 голосов
/ 06 мая 2018

Вы можете использовать метод заполнения с вложенным синтаксисом

const Post = mongoose.model('Post', postSchema);
const User = mongoose.model('User', userSchema);

Post
    .find({})
    .populate({path:'author.user', 'model':'User'})
    .exec((err, posts) => {
        if (err) return next(err);
        posts.forEach(post => {
          console.log(JSON.stringify( post, null, 2) ); // spacing level = 2
        }
    });

Будет выводить для каждого сообщения (это не совсем то, что вам нужно, но, надеюсь, у вас может быть гибкость в формате User

{ 
  _id: 5aedc4d3c534213279faec79,
  content: 'some content',
  author: [ 
    {
    user: {_id: 5aedc4d3c534213279faec7c, "user name here"}
    bool: true 
    },
    {
    user: {_id: 5aedc4d3c534213279faec7b, "user name 2 here"}
    bool: true 
    }
__v: 0 
}

Ссылка на mongoose.populate. http://mongoosejs.com/docs/populate.html

...