Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose模式[对象]问题_Javascript_Node.js_Mongodb_Mongoose_Aggregation Framework - Fatal编程技术网

Javascript Mongoose模式[对象]问题

Javascript 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

我正在使用通过mongoose连接到mongoDB的NodeJ。 需要在Nodejs(Mongoose)中应用以下工作聚合逻辑。聚合在DB端正常工作,但我得到[Object]错误

Model1:getAllUsers

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])