mongodb - MongoDB:查找 - 具有相同字段的集合
问题描述
我有两个系列Users
和Notes
. 两个集合都包含一个id
属性,并且Notes
集合有一个userid
是集合上某个用户的 id Users
。
现在,我正在尝试将一些用户信息聚合(加入)到Notes
:
db.getCollection("Notes").aggregate(
{
"$lookup": {
"from": "Users",
"let": {
"idForeignField": "$id"
},
"pipeline": [
{
"$match": {
"$expr": {
"$and": [{
"$eq": ["$userid", "$$idForeignField"]
}]
}
}
}
],
"as": "Users#joined"
}
}
);
我在一个空Users#joined
数组中得到什么。为什么?我的查询不应该工作吗?问题是由两个集合都有id
属性引起的吗?let
如果是,我怎么知道match
什么是正确的收藏?
更新:或者一个更简单的查询就可以了:
db.getCollection("Notes").aggregate(
{
$lookup:
{
from: "Users",
localField: "userid",
foreignField: "id",
as: "Users#joined"
}
}
);
但是,我想使用let
管道来添加更多match
条件。
谢谢你。
解决方案
你的let
变量必须是userid
db.getCollection("Notes").aggregate([
{ "$lookup": {
"from": "Users",
"let": { "ifForeignField": "$userid" },
"pipeline": [
{ "$match": { "$expr": { "$and": [{ "$eq": ["$id", "$$ifForeignField"] }] }}}
],
"as": "Users#joined"
}}
])
推荐阅读
- r - 在 r 的预测包中首次计算预测时,请选择更长的时间范围
- ruby-on-rails - S3 中的 ActiveStorage 和层次结构
- kubernetes - RabbitMQ 节点无法发现彼此并加入集群
- string - Bash:重复字符可变次数
- fortran - Fortran 95 分段错误(核心转储)
- redux - 具有多个 subreducer 的 CombineReducers 与在同一对象/映射上设置键值的 reducer
- python - “...匹配的查询不存在。” 错误,但对象显然确实存在
- c++ - C++:删除“自动”数组
- java - 如何知道使用什么 Base64 编码 Java 类的变体?
- python-2.7 - Python 2.7 添加到 dict 太慢了