Nie ma wbudowanej funkcji w MongoDB. Możesz jednak łatwo uzyskać te informacje za pomocą zapytania o agregację.
Załóżmy, że Twoja kolekcja zawiera następujące dokumenty:
{ "_id" : ObjectId("5874dbb1a1b342232b822827"), "title" : "title" }
{ "_id" : ObjectId("5874dbb8a1b342232b822828"), "title" : "new title" }
{ "_id" : ObjectId("5874dbbea1b342232b822829"), "title" : "hello world" }
{ "_id" : ObjectId("5874dbc6a1b342232b82282a"), "title" : "world title" }
{ "_id" : ObjectId("5874dbcaa1b342232b82282b"), "title" : "world meta" }
{ "_id" : ObjectId("5874dbcea1b342232b82282c"), "title" : "world meta title" }
{ "_id" : ObjectId("5874de7fa1b342232b82282e"), "title" : "something else" }
zapytanie to da nam informacji na temat słów:
db.products.aggregate([
{
$project:{
words:{
$split:["$title"," "]
}
}
},
{
$unwind:"$words"
},
{
$group:{
_id:"$words",
count:{
$sum:1
}
}
},
{
$sort:{
count:-1
}
}
])
ten wyjściowe Liczba wystąpienia dla każdego słowa:
{ "_id" : "title", "count" : 4 }
{ "_id" : "world", "count" : 4 }
{ "_id" : "meta", "count" : 2 }
{ "_id" : "else", "count" : 1 }
{ "_id" : "something", "count" : 1 }
{ "_id" : "new", "count" : 1 }
{ "_id" : "hello", "count" : 1 }
Jeśli używasz programu MongoDB 3.4, możesz uzyskać niezależne od wielkości liter/diakrytyczne słowo kluczowe insencja statystyki dotyczące słów z nową opcją collation.
na przykład, załóżmy, że nasza kolekcja zawiera teraz następujące dokumenty:
{ "_id" : ObjectId("5874e057a1b342232b82282f"), "title" : "title" }
{ "_id" : ObjectId("5874e05ea1b342232b822830"), "title" : "new Title" }
{ "_id" : ObjectId("5874e067a1b342232b822831"), "title" : "hello world" }
{ "_id" : ObjectId("5874e076a1b342232b822832"), "title" : "World Title" }
{ "_id" : ObjectId("5874e085a1b342232b822833"), "title" : "World méta" }
{ "_id" : ObjectId("5874e08ea1b342232b822834"), "title" : "World meta title" }
{ "_id" : ObjectId("5874e0aea1b342232b822835"), "title" : "something else" }
dodać opcję sortowania do kwerendy agregacji:
db.products.aggregate([
{
$project:{
words:{
$split:["$title"," "]
}
}
},
{
$unwind:"$words"
},
{
$group:{
_id:"$words",
count:{
$sum:1
}
}
},
{
$sort:{
count:-1
}
}
],
{
collation:{
locale:"en_US",
strength:1
}
})
to wyjście będzie:
{ "_id" : "title", "count" : 4 }
{ "_id" : "world", "count" : 4 }
{ "_id" : "méta", "count" : 2 }
{ "_id" : "else", "count" : 1 }
{ "_id" : "something", "count" : 1 }
{ "_id" : "new", "count" : 1 }
{ "_id" : "hello", "count" : 1 }
Siła to poziom porównania do wykonania:
collation.strength: 1 // case insensitive + diacritic insensitive
collation.strength: 2 // case insensitive only
Niezupełnie. Poszukuję terminów, które można przeszukiwać po tym, jak mongodb przygotował indeks tytułów, który jest zbiorem odrębnych słów znajdujących się w polach tytułowych wszystkich produktów, każdy termin w jakiś sposób wskazuje na listę produktów, których tytuł zawiera. Mimo wszystko dziękuję za odpowiedź, funkcja ta może być przydatna. –