我使用 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;