Javascript Mongoose模式[对象]问题
我正在使用通过mongoose连接到mongoDB的NodeJ。 需要在Nodejs(Mongoose)中应用以下工作聚合逻辑。聚合在DB端正常工作,但我得到[Object]错误 Model1:getAllUsersJavascript Mongoose模式[对象]问题,javascript,node.js,mongodb,mongoose,aggregation-framework,Javascript,Node.js,Mongodb,Mongoose,Aggregation Framework,我正在使用通过mongoose连接到mongoDB的NodeJ。 需要在Nodejs(Mongoose)中应用以下工作聚合逻辑。聚合在DB端正常工作,但我得到[Object]错误 Model1:getAllUsers var mongoose = require('mongoose'); const getAllUsersRolesDataSchema = new mongoose.Schema({ userRefID:String , skillRefId: String
var mongoose = require('mongoose');
const getAllUsersRolesDataSchema = new mongoose.Schema({
userRefID:String ,
skillRefId: String,
queueName:String,
})
module.exports = getAllUsersRoles = mongoose.model('getAllUsersRoles',getAllUsersRolesDataSchema);
在这里,我不确定我的模型创建是否正确
var mongoose = require('mongoose');
const getAllUsersDataSchema = new mongoose.Schema({
userRefID:String ,
userName:String,
divisionId: String,
divisionName:String,
emailId :String,
//This role definition i created only for aggregation to work
role:[{
userRefID:String,
skillRefId:String,
queueName:String,
}]
})
module.exports = getAllUsers = mongoose.model('getAllUsers',getAllUsersDataSchema );
Model2:getAllUsersRoles
var mongoose = require('mongoose');
const getAllUsersRolesDataSchema = new mongoose.Schema({
userRefID:String ,
skillRefId: String,
queueName:String,
})
module.exports = getAllUsersRoles = mongoose.model('getAllUsersRoles',getAllUsersRolesDataSchema);
数据库中的工作聚合查询:
db.getallusers.aggregate([
... {
... "$lookup": {
... "from": "getallusersroles",
... "localField": "userRefID",
... "foreignField": "userRefID",
... "as": "role"
... }
... }
... ]).pretty()
{
"_id" : ObjectId("5ff2b73d2af2b806685735a4"),
"userRefID" : "07f426ff-506f-4e5e-afdb-2c7397edac61",
"userName" : "EPS Purecloud Support",
"divisionId" : "36852a81-ad7f-4c71-a1cd-7f431c05179f",
"divisionName" : "",
"emailId" : "eps@genesys.com",
"role" : [
{
"_id" : ObjectId("5ff2b73c2af2b8066857355f"),
"userRefID" : "07f426ff-506f-4e5e-afdb-2c7397edac61",
"skillRefId" : "c02dbb03-ed78-442a-a9cd-0f16c823646b",
"queueName" : "CIM_test",
"__v" : 0
},
{
"_id" : ObjectId("5ff2b73c2af2b80668573560"),
"userRefID" : "07f426ff-506f-4e5e-afdb-2c7397edac61",
"skillRefId" : "a626d99e-f5e9-47ab-a5d0-d493003c737f",
"queueName" : "CLAIMS",
"__v" : 0
},
],
"__v" : 0
}
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) => {
getAllUsers.aggregate([
{
"$lookup": {
"from": "getallusersroles",
"localField": "userRefID",
"foreignField": "userRefID",
"as": "role"
}
},
],(err,res)=>{
console.log(res);
})
});
module.exports = router;
[
{
_id: 5ff2b73d2af2b806685735a4,
userRefID: '07f426ff-506f-4e5e-afdb-2c7397edac61',
userName: 'EPS Purecloud Support',
divisionId: '36852a81-ad7f-4c71-a1cd-7f431c05179f',
divisionName: '',
emailId: 'eps@genesys.com',
role: [ [Object], [Object] ],
__v: 0
},
]
节点代码:
db.getallusers.aggregate([
... {
... "$lookup": {
... "from": "getallusersroles",
... "localField": "userRefID",
... "foreignField": "userRefID",
... "as": "role"
... }
... }
... ]).pretty()
{
"_id" : ObjectId("5ff2b73d2af2b806685735a4"),
"userRefID" : "07f426ff-506f-4e5e-afdb-2c7397edac61",
"userName" : "EPS Purecloud Support",
"divisionId" : "36852a81-ad7f-4c71-a1cd-7f431c05179f",
"divisionName" : "",
"emailId" : "eps@genesys.com",
"role" : [
{
"_id" : ObjectId("5ff2b73c2af2b8066857355f"),
"userRefID" : "07f426ff-506f-4e5e-afdb-2c7397edac61",
"skillRefId" : "c02dbb03-ed78-442a-a9cd-0f16c823646b",
"queueName" : "CIM_test",
"__v" : 0
},
{
"_id" : ObjectId("5ff2b73c2af2b80668573560"),
"userRefID" : "07f426ff-506f-4e5e-afdb-2c7397edac61",
"skillRefId" : "a626d99e-f5e9-47ab-a5d0-d493003c737f",
"queueName" : "CLAIMS",
"__v" : 0
},
],
"__v" : 0
}
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) => {
getAllUsers.aggregate([
{
"$lookup": {
"from": "getallusersroles",
"localField": "userRefID",
"foreignField": "userRefID",
"as": "role"
}
},
],(err,res)=>{
console.log(res);
})
});
module.exports = router;
[
{
_id: 5ff2b73d2af2b806685735a4,
userRefID: '07f426ff-506f-4e5e-afdb-2c7397edac61',
userName: 'EPS Purecloud Support',
divisionId: '36852a81-ad7f-4c71-a1cd-7f431c05179f',
divisionName: '',
emailId: 'eps@genesys.com',
role: [ [Object], [Object] ],
__v: 0
},
]
控制台输出错误:
db.getallusers.aggregate([
... {
... "$lookup": {
... "from": "getallusersroles",
... "localField": "userRefID",
... "foreignField": "userRefID",
... "as": "role"
... }
... }
... ]).pretty()
{
"_id" : ObjectId("5ff2b73d2af2b806685735a4"),
"userRefID" : "07f426ff-506f-4e5e-afdb-2c7397edac61",
"userName" : "EPS Purecloud Support",
"divisionId" : "36852a81-ad7f-4c71-a1cd-7f431c05179f",
"divisionName" : "",
"emailId" : "eps@genesys.com",
"role" : [
{
"_id" : ObjectId("5ff2b73c2af2b8066857355f"),
"userRefID" : "07f426ff-506f-4e5e-afdb-2c7397edac61",
"skillRefId" : "c02dbb03-ed78-442a-a9cd-0f16c823646b",
"queueName" : "CIM_test",
"__v" : 0
},
{
"_id" : ObjectId("5ff2b73c2af2b80668573560"),
"userRefID" : "07f426ff-506f-4e5e-afdb-2c7397edac61",
"skillRefId" : "a626d99e-f5e9-47ab-a5d0-d493003c737f",
"queueName" : "CLAIMS",
"__v" : 0
},
],
"__v" : 0
}
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) => {
getAllUsers.aggregate([
{
"$lookup": {
"from": "getallusersroles",
"localField": "userRefID",
"foreignField": "userRefID",
"as": "role"
}
},
],(err,res)=>{
console.log(res);
})
});
module.exports = router;
[
{
_id: 5ff2b73d2af2b806685735a4,
userRefID: '07f426ff-506f-4e5e-afdb-2c7397edac61',
userName: 'EPS Purecloud Support',
divisionId: '36852a81-ad7f-4c71-a1cd-7f431c05179f',
divisionName: '',
emailId: 'eps@genesys.com',
role: [ [Object], [Object] ],
__v: 0
},
]
我从您的代码中了解到: 这是
用户
型号:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const UserSchema = new Schema({
userName: {
type: String,
},
divisionId: {
type: Schema.Types.ObjectId,
},
divisionName: {
type: String,
},
emailId: {
type: Schema.Types.ObjectId,
},
});
module.exports = getAllUsers = mongoose.model('User', UserSchema);
const mongoose = require('mongoose');
const Schema = mongoose.Schema
const RoleSchema = new Schema({
userRefID: {
type: Schema.Types.ObjectId,
},
skillRefId: {
type: Schema.Types.ObjectId,
},
queueName: {
type: String,
},
});
module.exports = getAllUsersRoles = mongoose.model('Role', RoleSchema);
这是角色
模型:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const UserSchema = new Schema({
userName: {
type: String,
},
divisionId: {
type: Schema.Types.ObjectId,
},
divisionName: {
type: String,
},
emailId: {
type: Schema.Types.ObjectId,
},
});
module.exports = getAllUsers = mongoose.model('User', UserSchema);
const mongoose = require('mongoose');
const Schema = mongoose.Schema
const RoleSchema = new Schema({
userRefID: {
type: Schema.Types.ObjectId,
},
skillRefId: {
type: Schema.Types.ObjectId,
},
queueName: {
type: String,
},
});
module.exports = getAllUsersRoles = mongoose.model('Role', RoleSchema);
聚合
方法的作用:
User.aggregate([
{
$lookup: {
"from": "Role",
"localField": "_id",
"foreignField": "userRefID",
"as": "roles"
},
},
]);
请使用数据库完整数据尝试此操作
也考虑使用<代码> MangoSo。填充检索用户角色的结果:
错误消息在哪里?作为旁注,您应该将Ref ID存储为ObjectId
,getAllUsersDataSchema
中的role
字段是不必要的<使用$lookup
的code>Aggregate方法不要求您的模型包含新的输出字段。您好。即使我删除了getAllUsersDataSchema中的角色字段,我也会得到与[Object]相同的输出。你能帮我一下吗。感谢您尝试检查这些[Object]
s。使用当前代码,您应该:console.log(res[0].role[0])