Это немного хитро, вы должны использовать операторы $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" }
>
Содержит имя пользователя, т.е. @
словона первом месте, это также будет работать, если имя пользователя присутствует в последнем из предложений твита.
Это может быть полезно, но вы всегда можете оптимизировать этот запрос, я публикую здесь просто для вашего понимания, я не предоставляю вам оптимизированное решение того, что вам нужно.
Для получения более подробной информации, пожалуйста, проверьте следующую ссылку:
$ split (агрегация)
$ раскрутка (агрегация)