我有一个作业,需要使用MongoDB从一些Twitter帖子中检索数据,并且已经有一个问题坐了几个小时了。 我需要提取提到的用户(在Twitter中,您@@ TheirUsername来提及他们),并且这样做很麻烦,我尝试使用substrCP,并找到“ @”开头的索引,但无法弄清楚如何找到“ @”停在哪里,因为名称的长度不同,并且名称结尾后可以有任何字符,例如“?”,“”。等
因此,我使用了正则表达式模式:/ @ \ w + /来查找该推文是否包含一个字符串,该字符串包含@符号,后跟一些单词。 找出推文中是否包含@Someone确实非常有效,但是我仍然不知道如何“提取”该推文。
(顺便说一句。我一直在使用聚合来做到这一点,所以我可以通过$ match,然后是$ project,最后是$ sort)来传递它
看起来像这样:
https://hastebin.com/adohogedil.bash
需要提取用户名的字符串的示例是:
“该死!@ white_cat22我错过了11:11”
我只需要“ @ white_cat22”部分。
编辑:稍作搜索之后,我认为一种更好的描述方法如下,我需要在被测试的字符串上检索匹配的正则表达式模式。
我该怎么做才能提取提到的用户名?任何帮助将不胜感激! (已编辑)
答案 0 :(得分:0)
答案 1 :(得分:0)
它有点棘手,您必须使用$split
和$unwind
运算符,然后将$match
与@
一起使用,如下所示:
db.tweets.aggregate([
{
$match: { tweet: /@\w+/ }
},
{
$project: {tweet: {$split: ["$tweet", " "]}}
},
{
$unwind: "$tweet"
},
{
$match: { tweet: /@\w+/ }
}
])
它产生的结果,几乎与您的要求类似:
{ "_id" : ObjectId("5c61aee91765cd7b27eb473e"), "tweet" : "@white_cat22" }
{ "_id" : ObjectId("5c61aeee1765cd7b27eb473f"), "tweet" : "@white_cat23" }
{ "_id" : ObjectId("5c61aef61765cd7b27eb4740"), "tweet" : "@cat23" }
{ "_id" : ObjectId("5c61aefd1765cd7b27eb4741"), "tweet" : "@KP" }
{ "_id" : ObjectId("5c61af051765cd7b27eb4742"), "tweet" : "@kpTesting" }
{ "_id" : ObjectId("5c61af091765cd7b27eb4743"), "tweet" : "@kpTesting12" }
{ "_id" : ObjectId("5c61b4791765cd7b27eb4744"), "tweet" : "@kpTesting12" }
有关更多信息,我对上面使用的集合的简单查找查询是:
> db.tweets.find()
{ "_id" : ObjectId("5c61aee91765cd7b27eb473e"), "tweet" : "damnnn! @white_cat22 i missed 11:11" }
{ "_id" : ObjectId("5c61aeee1765cd7b27eb473f"), "tweet" : "damnnn! @white_cat23 i missed 11:11" }
{ "_id" : ObjectId("5c61aef61765cd7b27eb4740"), "tweet" : "damnnn! @cat23 i missed 11:11" }
{ "_id" : ObjectId("5c61aefd1765cd7b27eb4741"), "tweet" : "damnnn! @KP i missed 11:11" }
{ "_id" : ObjectId("5c61af051765cd7b27eb4742"), "tweet" : "damnnn! @kpTesting i missed 11:11" }
{ "_id" : ObjectId("5c61af091765cd7b27eb4743"), "tweet" : "damnnn! @kpTesting12 i missed 11:11" }
{ "_id" : ObjectId("5c61b4791765cd7b27eb4744"), "tweet" : "@kpTesting12 i missed 11:11" }
>
它也包含用户名,即@
一词,如果该用户名出现在tweet句子的最后,它也将起作用。
这可能会有所帮助,但是您始终可以优化此查询,我在此处发布只是为了您的理解,我没有为您提供所需的优化解决方案。
有关更多详细信息,请检查以下参考资料: