使用 mongoose 连接两个集合并从两个集合中获取数据

0 mongoose mongodb node.js

我有两个集合UserTaxdetails ,我想要来自User 的姓名和电话号码以及来自Taxdetails 的付款详细信息,加入 两个集合中的user_id

我正在这样做:

User
    .find()
    .exec(function(err, userDetails) {
        if (err) {
            console.log("error in user collection");
            res
                .status(400)
                .json({ 'message':'error','success':false });
        } else {
            var userid = userDetails.map(function(obj) { 
                return obj._id;
              });
              Taxdetail
                  .find()
                  .exec({ user_id : { $in : userid } },function(err, requests) {
                        if(err){
                            console.log("error in TaxDetails collection");
                            res
                                .status(400)
                                .json({ 'message':'error','success':false });
                        }else{
                            console.log("Success, got some data");
                            res
                                .status(200)
                                .json(requests);
                        }                     
                    });
        }
    });
Run Code Online (Sandbox Code Playgroud)

Mol*_*lda 5

您可能希望在用户模式中使用引用的模式,然后像这样填充它:

var taxDetailSchema = new Schema({
    title: String
});

var taxDetail = mongoose.model('taxDetail', taxDetailSchema);

var userSchema = new Schema({
  name:  String,
  taxDetails: [{ type: Schema.Types.ObjectId, ref: 'taxDetail' }]
});
Run Code Online (Sandbox Code Playgroud)

您的查询将如下所示:

User
.find()
.populate('taxDetails')
.exec(function(err, users) {

});
Run Code Online (Sandbox Code Playgroud)

应该users看起来像这样:

[
    {
        name: 'Some Name',
        taxDetails: [
            { title: 'Some Title' },
            { title: 'Some other Title' }
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

猫鼬文档在这里

希望能帮助到你