【发布时间】:2021-01-04 02:19:29
【问题描述】:
我有以下文档结构的集合。
Collection-1:getallusers:
db.getallusers.find().pretty()
{
"_id" : ObjectId("5ff0c73e5930dd43c05ac221"),
"userRefID" : "07f426ff-506f-4e5e-afdb-2c7397edac61",
"userName" : "EPS Purecloud Support",
"divisionId" : "36852a81-ad7f-4c71-a1cd-7f431c05179f",
"divisionName" : "",
"emailId" : "eps@genesys.com",
"__v" : 0
}
{
"_id" : ObjectId("5ff0c73e5930dd43c05ac222"),
"userRefID" : "c5ce06dc-6265-4d16-be18-f5fc5a918295",
"userName" : "Generic",
"divisionId" : "36852a81-ad7f-4c71-a1cd-7f431c05179f",
"divisionName" : "",
"emailId" : "integration-generic-a03293c0-945d-11ea-a64c-ebeb45b9d295@webhook.com",
"__v" : 0
}
Collection-2:getallusersroles:
db.getallusersroles.find().pretty()
{
"_id" : ObjectId("5ff0fb02b21b1d0760f3107b"),
"userRefID" : "07f426ff-506f-4e5e-afdb-2c7397edac61",
"skillRefId" : "c02dbb03-ed78-442a-a9cd-0f16c823646b",
"queueName" : "CIM_test",
"__v" : 0
}
{
"_id" : ObjectId("5ff0fb02b21b1d0760f3107c"),
"userRefID" : "07f426ff-506f-4e5e-afdb-2c7397edac61",
"skillRefId" : "a626d99e-f5e9-47ab-a5d0-d493003c737f",
"queueName" : "CLAIMS",
"__v" : 0
}
{
"_id" : ObjectId("5ff0fb02b21b1d0760f3107d"),
"userRefID" : "07f426ff-506f-4e5e-afdb-2c7397edac61",
"skillRefId" : "9b31524c-b574-4917-b470-8b86f430beaa",
"queueName" : "CSS_AZ_IND_BILL_EN_1",
"__v" : 0
}
{
"_id" : ObjectId("5ff0fb03b21b1d0760f310b3"),
"userRefID" : "c5ce06dc-6265-4d16-be18-f5fc5a918295",
"skillRefId" : "f3bf0897-1b63-4a03-9f8f-5b18fc03401b",
"queueName" : "Aflac",
"__v" : 0
}
{
"_id" : ObjectId("5ff0fb03b21b1d0760f310b4"),
"userRefID" : "c5ce06dc-6265-4d16-be18-f5fc5a918295",
"skillRefId" : "c02dbb03-ed78-442a-a9cd-0f16c823646b",
"queueName" : "CIM_test",
"__v" : 0
}
要求:
需要一个集合 3 - testalluser 如下格式: 在这两个集合中,我正在尝试使用“userRefID”加入。 对我来说,我需要像下面的结构一样添加“角色”,你能帮我吗?谢谢
{
"_id" : ObjectId("5fdb245b848fbb32e86172c6"),
"userRefID" : "07f426ff-506f-4e5e-afdb-2c7397edac61",
"userName" : "EPS Purecloud Support",
"divisionId" : "36852a81-ad7f-4c71-a1cd-7f431c05179f",
"divisionName" : "",
"emailId" : "eps@genesys.com",
"roles":[{
"userRefID" : "07f426ff-506f-4e5e-afdb-2c7397edac61",
"skillRefId" : "c02dbb03-ed78-442a-a9cd-0f16c823646b",
"queueName" : "CIM_test"
},
{
"userRefID" : "07f426ff-506f-4e5e-afdb-2c7397edac61",
"skillRefId" : "a626d99e-f5e9-47ab-a5d0-d493003c737f",
"queueName" : "CLAIMS",
}
{
** third**
}
"__v" : 0
}
{
** Similarly for second user data
}
以下逻辑正常工作:
db.getallusers.aggregate([
{
"$lookup": {
"from": "getallusersroles",
"localField": "userRefID",
"foreignField": "userRefID",
"as": "role"
}
},
{ $merge: { into: "testalluser" } }
]).pretty()
我在这里动态创建 testalluser 集合,而不是通过 Mongoose 模型。
很少有查询:
1.每次执行此操作时,我都需要清空此集合中的所有文档并将新文档保存到其中。 (通常当我通过 Mongoose 模型创建集合时,我将使用 deleteMany({}) 通过引用该模型来清除数据,但我无法在此处执行此操作,因为我没有此集合的模型)
2.当我使用 Mongoose 时,是否必须为所有集合创建模型。请指正,谢谢。
在下面的 Nodejs(Mongoose) 代码中,我试图删除此集合的文档,然后需要执行此连接逻辑以将输出存储在此集合中 (testalluser)。稍后我需要查找并作为响应发送。
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');
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
getAllUsersRoles.deleteMany({},()=>{
getAllUsersRoles.find((err,getusers)=>{
if(err){
console.log(err)
}
else{
res.send(getusers);
console.log(getusers);
}
})
})
});
module.exports = router;
【问题讨论】:
-
把
"localField": "userId", "foreignField": "userId",改成"localField": "userRefID", "foreignField": "userRefID",
标签: node.js mongodb mongoose mongodb-query aggregation-framework