MongoDB делает поиск $ $ для полей разных типов, но с одинаковым контентом - PullRequest
1 голос
/ 05 апреля 2019

Я знаю, что в logTable "mailID" равен "1234" (String)

, а в mailTable "_id" равен 1234 (NumberInt)

Но есть ли вообще способДля этого $lookup?

Журнал таблицы

{ 
    "_id" : "mailStuff0234", 
    "mailID" : "1234", 
    "typeState" : "NEW", 
    "changeByType" : "ADMIN" 
}

Почтовый стол

{ 
    "_id" : NumberInt(1234), 
    "user" : "torben@sunnythailand.com", 
    "subject" : "Visit to Atlantis Condo Resort"
}   

и вот совокупность

db.log.aggregate([ 
    { '$match': { typeState: 'NEW'} },
    { '$lookup': { 
        from: 'mail', 
        localField: 'mailID', 
        foreignField: '_id', 
        as: 'mail' 
    } }, 
    { '$unwind': '$mail' }
], {})

1 Ответ

1 голос
/ 05 апреля 2019

В MongoDB 4.0 введен оператор $ toInt , так что вы можете преобразовать значение mailID перед применением $ lookup .

db.log.aggregate([
    {
        $addFields: { mailID: { $toInt: "$mailID" } }
    },
    {
        $lookup: {
            from: "mail",
            localField: "mailID",
            foreignField: "_id",
            as: "mail"
        }
    }
])

Вы также можете использовать $ lookup с пользовательским конвейером :

db.log.aggregate([
    {
        $lookup: {
            from: "mail",
            let: { mailID: { $toInt: "$mailID" } },
            pipeline: [ { $match: { $expr: { $eq: [ "$_id", "$$mailID" ] } } } ],
            as: "mail"
        }
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...