У меня есть коллекция MongoDB, в которой хранятся все пользовательские данные.
Документ моей коллекции имеет следующую форму JSON:
{
"_id" : ObjectId("542e67e07f724fc2af28ba75"),
"id" : "",
"email" : "[email protected]",
"tags" : [
{
"tag" : "Paper Goods:Liners - Baking Cups",
"weight" : 2,
"lastInsert" : 1412327492874
},
{
"tag" : "Vegetable:Carrots - Jumbo",
"weight" : 4,
"lastInsert" : 1412597883569
},
{
"tag" : "Paper Goods:Lialberto- Baking Cups",
"weight" : 1,
"lastInsert" : 1412327548205
},
{
"tag" : "Fish:Swordfish Loin Portions",
"weight" : 3,
"lastInsert" : 1412597939124
},
{
"tag" : "Vegetable:Carrots - [email protected]",
"weight" : 2,
"lastInsert" : 1412597939124
}
]
}
Поле tag
имеет форму "category:name product"
, а поле "tags"
содержит все продукты, купленные пользователем.
Я пишу приложение Scala и использую драйвер reactivemongo. Теперь я пишу метод, который с учетом category
и product
ищет всех пользователей, которые купили хотя бы продукт данной категории, но еще не купили ни одного продукта, равного данному.
Мой код сейчас выглядит следующим образом:
def findUsers(input: FindSuggestion): Future[Option[List[User]]] = {
val category = input.category //a string
val product = input.product //a string, in the form category:productName
val query = Json.obj(//create the query object)
Users.find(query).toList.flatMap(users =>
if(users.size > 0)
Future{Some(users)}
else
Future{None}
)
}
Чтобы быть более конкретным, я ищу весь документ, где поле tags
содержит документ, где поле tag
начинается с категории, но поле tags
не содержит документа, где tag == product
.
Как я могу сделать это в mongodb ??