$lookup 使用猫鼬 Nodejs

时间:2021-01-03 19:34:56

标签: javascript node.js mongodb mongoose aggregation-framework

我使用 Nodejs(express) 使用 Mongoose 连接 MongoDB。 这是在其他 API 调用中使用 Mongoose 模式创建的两个集合。对于一个 API 调用请求,我需要加入这两个集合并创建包含新合并输出的新集合 (testalluser)。 并且需要查找所有文档并将输出发送到 API 调用的响应中。

注意:我也尝试创建模型,但没有成功。

查询在 DB 中工作正常。但在 Mongoose 中,我只得到空数组作为输出。请您帮我将此逻辑应用到 NodeJS 中的 Mongoose。

db.getallusers.aggregate([
  {
    "$lookup": {
      "from": "getallusersroles",
      "localField": "userRefID",
      "foreignField": "userRefID",
      "as": "role"
    }
  },
  
{ $merge: { into: "testalluser" } }

]).pretty()

集合 1 架构:getAllUsers

var mongoose = require('mongoose');

const getAllUsersDataSchema = new mongoose.Schema({
    
    userRefID:String ,
    userName:String,
    divisionId: String,
    divisionName:String,
    emailId :String,

})

module.exports = getAllUsers = mongoose.model('getAllUsers',getAllUsersDataSchema );

集合 2 getAllUsersRoles

var mongoose = require('mongoose');

const getAllUsersRolesDataSchema = new mongoose.Schema({
    
    userRefID:String ,
    skillRefId: String,
    queueName:String,

})

module.exports = getAllUsersRoles = mongoose.model('getAllUsersRoles',getAllUsersRolesDataSchema);

集合 3:testalluser(我尝试过,但不确定是否需要)

var mongoose = require('mongoose');

const getAllCustomUsersDataSchema = new mongoose.Schema({
    
    
    divisionId: String,
    divisionName:String,
    emailId :String,
    role: Array,
    userRefID:String ,
    userName:String,

})

module.exports = testalluser = mongoose.model('testalluser',getAllCustomUsersDataSchema);

NodeJs 代码:

const express = require('express');
const router = express.Router();
const request = require('request');
const config = require('../config');
const fs = require('fs'); 
const getAllUsers = require ('../db/getAllUsersListmodel');
const getAllUsersRoles = require ('../db/getetUserRolesListModel');
const testalluser =require('../db/getCustomUserListModel');
var mongoose = require('mongoose');
mongoose.connect ('mongodb://localhost/testdb',{ useUnifiedTopology: true , useNewUrlParser: true });

 
router.get('/', (req, res) => {
    // token in session -> get user data and send it back to the Angular app
   
  // Empty up the already existing documents inside this collection
testalluser.deleteMany({},()=>{  

//Here i am trying to aggregate 
   getAllUsers.aggregate([
      {
        "$lookup": {
          "from": "getallusersroles",
          "localField": "userRefID",
          "foreignField": "userRefID",
          "as": "role"
        }
      },
      
    { $merge: { into: "testalluser" } } // creating this doc first time
    
    ]).

    // Here i am trying to find the docs in this newly created collection
    testalluser.find((err,getusers)=>{
      if(err){
      console.log(err)
      }
      else{ 
        res.send(getusers);
        console.log(getusers);
      }
   })  
    
  })
  });

  module.exports = router;

0 个答案:

没有答案
相关问题