python - MongoDB:如何在其聊天室有电话号码的地方查找消息?
问题描述
我有这个 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 获取 id 并用它来检查这个聊天室是否有我的电话号码(在 users 数组下)。
简而言之,我想显示他们的聊天室有我的电话号码的所有消息:例如 - 987654321。
提前致谢。
解决方案
您可以使用$lookup
管道变体$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}}
])
推荐阅读
- python - openCL cv2.UMat 对象不可迭代
- excel - 所有日期变量的 IF 逻辑为空
- c++ - 从 Linux OMI (omicli) 到 Windows WMI 的连接失败并出现 DMTF 相关错误
- javascript - 解析嵌套的 javascript 对象
- serial-port - RS232 上的 DTR/RTS 可以用作 GPIO 来打开/关闭传感器吗?协议是否允许这种配置?
- logging - 在 IDE 中运行时的 Logback 配置
- git - 忽略已经提交给 git 的文件
- spring - 项目构建错误:io.zipkin.java:zipkin-autoconfigure-ui:jar 的“dependencies.dependency.version”缺失
- android - Android Studio 是否提供了一种测试设备之间交互的方法?
- python - 如何解决excel行列难?