如何使用moongoose populate?

时间:2017-05-12 11:20:08

标签: node.js mongoose mongoose-populate

我有两本架构,一本书和其他用户

 let mongoose = require('mongoose'),
        Schema = mongoose.Schema;

    let book = new Schema({
        id: {type : Schema.Types.ObjectId, default: null},
        author: {type : Array, default: []},
        userId:{type:Array,default:[]},
        issued:[{type:Schema.Types.ObjectId,ref:'users'}]
    });

    let user = new Schema({
       id: {type : Schema.Types.ObjectId, default: null},
       name:{type : String, default: null},
       address:{type : String, default: null}
    });

书籍架构中的已发布属性包含已发行书籍的用户的详细信息。

  

可以使用book Schema的userId填充Issued Property   将book schema的userId与用户Schema的Id匹配。

let user =  mongoose.model("Model", userSchema, "users");
let book = mongoose.model("book", bookSchema);

  book.find({}).populate('users').exec(function (err, result) {
        console.log(result);
           //Query is failing what wrong i am doing.
    });

我无法确定如何获取用户详细信息。

我想要对象:

{  
    id: 8888998898989,
    author: 'Author ',
    userId:['232323232332','ssssssss'],
    issued:[
             {'id':232323232332,'name':'User1'},
             {'id':ssssssss,'name':'User2'}
            ]
  }

2 个答案:

答案 0 :(得分:0)

您需要将populate方法与对象文字一起使用,如下所示:

.populate({ path: 'id', model: 'ssers', select:'id name' })

您可以使用lean()查询,以便您可以修改输出,然后执行填充这两个字段,只保留您想要的字段

.lean().populate('users', 'id name address')

可以找到更多示例https://neo4j.com/developer/guide-create-neo4j-browser-guide/here

答案 1 :(得分:0)

.populate({ path: 'userId', model: 'users', select:'id name address' })