Лучший способ запросить MongoDB для набора членства? - PullRequest
0 голосов
/ 22 мая 2018

В основном, пытаясь выяснить, есть ли лучший способ сделать это, немного неуклюже, если не сказать больше.

Я пытаюсь запросить базу данных 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)

По сути, просто интересно, есть ли лучший способ сделать это, который кто-то может предложить, который не включает в себя циклическоезапросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...