MongoDB: Как найти сообщения, где в его чате есть номер телефона?

1

У меня есть этот json в качестве документа моего сообщения:

{"_id":"nOneDzCuhE",
 "type":"text",
 "_p_chatRoomId":"chatrooms$BSxYYyUX49",
 "chatRoomIdText":"BSxYYyUX49",
 "_p_senderId":"_User$LD0r3WkuUD"
 "message":"Hello World!"
 "senderIdText":"LD0r3WkuUD"
 "_created_at":"2018-08-29 19:52:46.678",
 "_updated_at":"2018-08-29 19:52:46.678"
}

И это мой документ в чате:

{   "_id":"mfBRNbQ0gd",
    "type":"Individuals",
    "users": [
        0: {"phone_number":"987654321","id":"7AifRl9D3T","name":"user1"},
        1: {"phone_number":"123456789","id":"qapXotisT1","name":"User2"}
    ],
    "_created_at": "2018-08-14 18:11:06.090",
    "_updated_at":"2018-08-14 18:11:06.090"
}

Итак, сначала я хочу получить идентификатор из chatRoomIdText и использовать его, чтобы проверить, имеет ли этот чат номер моего телефона (под массивом пользователей).

Вкратце, я хочу показать все сообщения, в которых у их чата есть мой номер телефона: например, - 987654321.

Заранее спасибо.

Теги:
aggregation-framework
nosql

1 ответ

1
Лучший ответ

Вы можете использовать вариант $lookup pipe для применения $match внутри объединенной коллекции в 3.6.

Предполагая, что присоединиться на chatRoomIdText & _id что - то вроде должно работать для вас.

db.message.aggregate([      
   {"$lookup":{
      "from":"chatroom",
      "let":{"chatRoomIdText":"$chatRoomIdText"},
      "pipeline":[
        {"$match":{
          "$expr":{
           "$and":[
              {"$eq":["$$chatRoomIdText","$_id"]},
              {"$in":["987654321","$users.phone_number"]}
             ]
           }
        }}
      ],
      "as":"lookup-results"
    }},
    {"$match":{"lookup-results.0":{"$exists":true}}},
    {"$project":{"lookup-results":0}}
])

Ещё вопросы

Сообщество Overcoder
Наверх
Меню