【问题标题】:Combine the two different collection of mongoose after iteration based on common key and from one json and send in nodejs基于公共密钥和来自一个json的迭代后组合两个不同的mongoose集合并在nodejs中发送
【发布时间】:2018-01-06 17:34:54
【问题描述】:

我在 MongoDb 中有两个集合,它们有一个关系,比如 sql 的主键和外键。基于这个键如何从集合中提取所有文档/记录并将那里的数据组合到一个 json/record 中并发送。

案例:集合具有这样的架构

user:{id,role,email}
userAction:{id,user.id,post,job}
userTask:{id,user.id,job,task}

现在我想根据 user.id 从 userAction 和 userTask 中提取所有数据并形成这样的 json

[{user.id,user.role,user.email,userAction.id,userAction.post,userAction.job,userTask.id,userTask.job,userTask.task},{....}]

如何在 nodejs 中使用 mongoose?

我将调用用户的userModel.find(query,callback) 以从user 中提取记录,并且在函数成功完成后,我将在其中调用userTaskModel.find(query,callback)userActionModel.find(query ,callback)。我将拥有一个userdata=[];,在那里我将push 形成一个json 后的所有记录并将response.json(userdata); 中的userdata 数组发送给用户。 任何帮助将不胜感激。

【问题讨论】:

标签: json node.js mongodb express


【解决方案1】:

我已经对解决方案进行了测试,直到 mongoose 版本 4.10.8
asyncoutput.toObject() 为我完成了真正的工作

const express = require("express");
const async = require("async");
const router = express.Router();
var mongoose=require('mongoose');
var UsersDb=mongoose.model('user');  
var userAction = mongoose.model("useraction");  
router.get("/emp/:id", (req, res, next) => {
      let userData = [];
      UsersDb.find({id:req.params.id},(err,results)=>{

        async.forEach(results,(element,callback)=>{
        userAction.findById({userid:element.id},function(err, output) {

            let useraction = output.toObject();       
            useraction.role=element.role;             
            useraction.email=element.email;
            useraction.userid=element._id;

            userData.push(useraction);
            callback();       
          });
        },(err)=>{
          if (err) return next(err);
          res.json(userData);
        });

      });

    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-06
    • 2021-03-19
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    相关资源
    最近更新 更多