Node.js MongoDB$lookup Objectid是否获取空数组?

Node.js MongoDB$lookup Objectid是否获取空数组?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我是mongodb新手,在mongoose下面的文档中使用$lookup练习aggregate,我遇到了一个非常令人困惑的问题 我有用户模式 const userSchema = new Schema({ userName: {type: String, index:{unique: true}}, password: String, avatar: String }) 注释模式 const commentSchema = new Schema({ post: {type: S

我是mongodb新手,在mongoose下面的文档中使用
$lookup
练习
aggregate
,我遇到了一个非常令人困惑的问题

我有用户模式

const userSchema = new Schema({
  userName: {type: String, index:{unique: true}},
  password: String,
  avatar: String
})
注释模式

const commentSchema = new Schema({
  post: {type: Schema.Types.ObjectId, ref:'postModel'},
  author:{type: Schema.Types.ObjectId, ref:'userModel'},
  content: String,
  createTime: Date
})
模型
commentModel=mongoose.model('commentModel',commentSchema)
userModel=mongoose.model('userModel',userSchema)
那我会的

commentModel.aggregate.([{$lookup: {
  from: 'userModel',
  localField: 'author',
  foreignField: '_id',
  as: 'common'
}])
但是我在查询中得到空的common。根据数据库中的数据,我不应该得到这个结果。经过搜索,我仍然找不到错误所在


最后但并非最不重要的一点是,我需要使用
aggregate
方法,因此我必须在参考文档上使用
$lookup
,这有意义吗?

在$lookup中的
from
字段是集合名称,而不是模型变量名称。如果你像这样初始化模型

db.model('User', userSchema)
然后,应该创建查找查询

commentModel.aggregate([{$lookup: {
  from: 'users',
  localField: 'author',
  foreignField: '_id',
  as: 'common'
}])

谢谢你的回答,我已经编辑了我的问题,简言之,我没有提到模型部分,但我创建了这些模型。根据更新的问题,集合名称应该是
usermodels
。您可以通过直接连接到mongodb和显示集合来验证它。您指出了问题所在,我连接MongoShell并使用
usermodels
而不是
userModel
,它可以工作!但是在我早期的实践中,例如
填充引用
,我采用了
用户模型
,并且它也很有效。不管怎样,谢谢你的回答,它阻止了我发疯:)祝你有一个愉快的一天!