我有下一个mongo代码:

db.users.aggregate([
    { 
        $match: { 
            $and: [
                { UserName: { $eq: 'administrator' } }, 
                { 'Company.CompanyName': { $eq: 'test' } }
            ]                   
        } 
    },
    { 
        $lookup: { 
            from: "companies", 
            localField: "CompanyID", 
            foreignField: "CompanyID", 
            as: "Company" 
        } 
    },
])

代码的$lookup部分工作得很好.我得到了下一个结果:

enter image description here

但如果我给代码加上$match,它什么也不会带来.

我发现问题出在第二场比赛:{ 'Company.CompanyName': { $eq: 'test' } },但我不知道这是怎么回事.

UPDATE:

我也try 了$lookup结果的$unwind,但没有运气:

db.users.aggregate([
    { 
        $match: { 
            $and: [
                { UserName: { $eq: 'administrator' } }, 
                { 'Company.CompanyName': { $eq: 'edt5' } }
            ] 
        } 
    },
    {   unwind: '$Company' },
    { 
        $lookup: { 
            from: 'companies', 
            localField: 'CompanyID', 
            foreignField: 'CompanyID', 
            as: 'Company' 
        } 
    },
])

推荐答案

使用MongoDB 3.4,可以运行聚合管道,使用100管道和101操作符只返回Company数组中与给定条件匹配的元素.然后,您可以使用103运算符包装101表达式,以返回一个文档,该文档实质上通过展平数组合并了104功能.

按照本例理解上述概念:

db.users.aggregate([
    { "$match": { "UserName": "administrator" } },
    { 
        "$lookup": { 
            "from": 'companies', 
            "localField": 'CompanyID', 
            "foreignField": 'CompanyID', 
            "as": 'Company' 
        } 
    },
    {
        "$addFields": {
            "Company": {
                "$arrayElemAt": [
                    {
                        "$filter": {
                            "input": "$Company",
                            "as": "comp",
                            "cond": {
                                "$eq": [ "$$comp.CompanyName", "edt5" ]
                            }
                        }
                    }, 0
                ]
            }
        }
    }
])

Mongodb相关问答推荐

geoLocation或geoNear为坐标和半径使用let变量

Mongo DB-如果一个特定字段有多个文档匹配,则更新文档字段

如何在MongoDB中对两个数组进行分组?

使用mongo'db.Decode(&dto)映射一个嵌套的 struct

通过 _id 更新一个文档(无效的 BSON 字段名称 _id)

Mongo C#忽略属性

从 PHP 打印 MongoDB 日期

在mongoose中添加多个验证

.insertOne 不是函数

如何使用 Spring Data MongoDB 通过 GridFS ObjectId 获取二进制流

将 mongoose 字符串模式类型默认值设为空白并使该字段可选

Node + Mongoose:获取最后插入的 ID?

具有 AWS 云形成和自动zoom 的 Mongodb 集群

使用 MongoDB 的 map/reduce 来分组两个字段

使用 Jackson 与 Java Mongo DBObject 进行高效 POJO 映射

如何判断 MongoDB 中是否存在字段?

MongoDB mongoexport 查询

按 id 删除记录?

是否可以在 Mongodb 中的两个数据库之间进行 $lookup 聚合?

使用 Mongoose ORM 的杀手锏是什么?