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 和 $group 返回空数组
MongoDB Lookup 返回一个空数组,只有在没有数据的时候