我正在尝试创建基于非twitter用户提及的网络地图。我正在MongoDB中存储数据,无法找出如何删除不需要的用户。
数据库文档示例:
{
'user': 'user1'
'mentioned_users: ['user2', 'user3']
}
{
'user': 'user2'
'mentioned_users: ['user1', 'user3']
}
所需输出示例:
{
'user': 'user1'
'mentioned_users': ['user2']
}
{
'user': 'user2'
'mentioned_users': ['user1']
}
user3同时存在于提到的用户的user1和user2列表中,但是user3是无关的,因为user3在集合中没有自己的文档。
我需要一个使用db.collection.find()或其他方法的过滤器,这样我就可以摆脱所有无关的用户。
使用pymongo有简单的方法吗?还是应该创建一个python解决方案?
最佳答案
您可以在mongodb查询中使用ignaggregate
实现这一点。可以试试这个
db.users.aggregate([
{$unwind: "$mentioned_users"},
{$lookup: {from: "users", localField: "mentioned_users", foreignField: "user", as: "validUser"}},
{$match: {"validUser.user": {$exists: true}}},
{
$group: {
_id: "$_id",
user: {$first: "$user"},
mentioned_users: {$push: "$mentioned_users"}
}
}
])
然后输出如下
{
"_id" : ObjectId("5a13bc87400096bfa0b34228"),
"user" : "user1",
"mentioned_users" : ["user2"]
}
{
"_id" : ObjectId("5a13bc87400096bfa0b34229"),
"user" : "user2",
"mentioned_users" : ["user1"]
}
关于python - 在MongoDB文档中过滤数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47403807/