В основном, пытаясь выяснить, есть ли лучший способ сделать это, немного неуклюже, если не сказать больше.
Я пытаюсь запросить базу данных mongoDB, используя три переменные, и я хочу вывестинабор чисел, которые указывают, сколько элементов в данном образце содержат определенные наборы / совпадения переменных (не вероятности совпадений, а фактические совпадения).Есть ли более простой способ сделать это, чем просто запросить один за другим «A и B и C», а затем «A и B, но не C» и т. Д ...?
Пример запроса: Учитывая 100 газетных статей в базе данных, каковы все установленные членства для вхождений ключевых слов A, B и C?
Пример вывода: (вывод в форме 10,20,20,5,5,10,20,10)
- A & B & C существует: 10
- A & B (но не C): 20
- A & C (но не B): 20
- A (но не B или C): 5
- B & C (но не A): 5
- B (но не A или C): 10
- C (но не A или B): 20
- Нет: 10
Редактировать: Ниже приведен пример типа данных, которые я пытаюсь запросить, в основном ключевые слова:
{
"_id" : ObjectId("5af2f38f8ff26c8160a864be"),
"date" : ISODate("2010-03-02T00:00:00.000Z"),
"publication" : "guardian",
"title" : "'After you Conor, age before beauty' – Ian Paisley in his own words",
"keywords" : [
"queen",
"church",
"associ",
"scotland",
"intent",
"parti",
"alli",
"northern",
"secretari",
"age",
"gather",
"rival",
"unit"
],
"article_id" : ObjectId("5a72d72b257e063072ad9605")
}
... и то, как я в настоящее времязапрос к базе данных:
counter = article_list.count( { $and: [{keywords: {$in: ["scotland"]}}, {keywords: {$in: ["church"]}},{keywords: {$in: ["queen"]}}] } )
outputArray.append(counter) # A & B & C
counter = article_list.count( { $and: [{keywords: {$in: ["scotland"]}}, {keywords: {$in: ["church"]}},{keywords: {$nin: ["queen"]}}] } )
outputArray.append(counter) # A & B
counter = article_list.count( { $and: [{keywords: {$in: ["scotland"]}}, {keywords: {$nin: ["church"]}},{keywords: {$in: ["queen"]}}] } )
outputArray.append(counter) # A & C
counter = article_list.count( { $and: [{keywords: {$in: ["scotland"]}}, {keywords: {$nin: ["church"]}},{keywords: {$nin: ["queen"]}}] } )
outputArray.append(counter) # ONLY A
counter = article_list.count( { $and: [{keywords: {$nin: ["scotland"]}}, {keywords: {$in: ["church"]}},{keywords: {$in: ["queen"]}}] } )
outputArray.append(counter) # B & C
counter = article_list.count( { $and: [{keywords: {$nin: ["scotland"]}}, {keywords: {$in: ["church"]}},{keywords: {$nin: ["queen"]}}] } )
outputArray.append(counter) # ONLY B
counter = article_list.count( { $and: [{keywords: {$nin: ["scotland"]}}, {keywords: {$nin: ["church"]}},{keywords: {$in: ["queen"]}}] } )
outputArray.append(counter) # ONLY C
print ', '.join(outputArray)
По сути, просто интересно, есть ли лучший способ сделать это, который кто-то может предложить, который не включает в себя циклическоезапросы.