Mongodb $lookup 返回空数组

Posted

技术标签:

【中文标题】Mongodb $lookup 返回空数组【英文标题】:Mongo $lookup return empty array 【发布时间】:2018-08-27 03:19:43 【问题描述】:

在我的模式上执行 $lookup 时,它总是返回一个空数组。我究竟做错了什么?

结果集合

const resultSchema = new mongoose.Schema(
  trial: 
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Trial',
    required: true
  
);

试用合集

const trialSchema = new mongoose.Schema(
  name: 
    type: String,
    required: true
  
);

聚合

Result.aggregate([
    
      $lookup: 
        from: 'trial',
        localField: 'trial',
        foreignField: '_id',
        as: 'x'
      
    
  ])
    .exec()
    .then(results => ( results ))

"x" 最终总是一个空数组。

【问题讨论】:

【参考方案1】:

好的,刚刚在这里找到了答案:https://***.com/a/45481516/3415561

查找中的“来自”字段必须是您的集合名称,而不是模型名称。因此它是一个复数词。 在这里

from: 'trials'

而不是

from: 'trial'

【讨论】:

还要确保字段类型应该相同。示例:- 带字符串的字符串,带 ObjectId 的 ObjectId【参考方案2】:

检查集合名称。在聚合函数中“试用”以小写开头,在结果集合中“试用”以大写开头

【讨论】:

感谢您的回答!在查找的 from 字段中将其更改为“试用”,没有任何效果。另外,填充函数适用于这些模式,所以我猜/希望这不是问题。 通过 mongodb 控制台查看 Result Collection 中的单个文档。也许猫鼬使用奇怪的格式 试图删除集合,更正每个模型中的每个大写字符,重新创建每个文档。结果相同。还尝试在 mongo 控制台中重现查询,结果相同...【参考方案3】:

在我的例子中,我错误地将 $ 放在了集合名称的前面:

$lookup: 
  from: '$users', // <- incorrect
  foreignField: '_id',
  localField: 'userid',
  as: 'users'
,

应该是

$lookup: 
  from: 'users', // <- correct
  foreignField: '_id',
  localField: 'userid',
  as: 'users'
,

【讨论】:

以上是关于Mongodb $lookup 返回空数组的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB $lookup 返回空数组[重复]

MongoDB:$lookup 返回空数组

MongoDB $lookup 和 $group 返回空数组

MongoDB Lookup 返回一个空数组,只有在没有数据的时候

MongoDB Lookup 返回一个空数组,只有在没有数据的时候

MongoDB $lookup 仅替换对象数组中的 ID