Запросить коллекцию сразу в монго на основе критериев соответствия - PullRequest
0 голосов
/ 03 ноября 2019

Я хочу написать статистическую функцию для выбора всех имен, имеющих TCS, в коллекции за один вызов -

Как мне написать, чтобы получить все имена с TCS за один вызов?

    db.stocks.find()
    { "_id" : ObjectId("5d81e624ae6a505982c1c409"), "name" : "Infosys", "qty" : 100, "price" : 800 }
    { "_id" : ObjectId("5d81e624ae6a505982c1c40a"), "name" : "TCS", "qty" : 100, "price" : 2000 }
    { "_id" : ObjectId("5d81e624ae6a505982c1c40b"), "name" : "Wipro", "qty" : 2500, "price" : 300 }
    { "_id" : ObjectId("5dbea62c608aba164b7c869b"), "name" : "TCS", "qty" : 0, "price" : 800 }
    { "_id" : ObjectId("5dbea62c608aba164b7c869c"), "name" : "TCS", "qty" : 0, "price" : 2000 }
    db.stocks1.find()
    { "_id" : ObjectId("5d81e652ae6a505982c1c40c"), "name" : "Infosys_1", "qty" : 100, "price" : 800 }
    { "_id" : ObjectId("5d81e652ae6a505982c1c40d"), "name" : "TCS_1", "qty" : 100, "price" : 2000 }
    { "_id" : ObjectId("5d81e652ae6a505982c1c40e"), "name" : "Wipro_1", "qty" : 2500, "price" : 300 }
    { "_id" : ObjectId("5d81f013ae6a505982c1c40f"), "name" : "Infosys", "qty" : 200, "price" : 800 }
    { "_id" : ObjectId("5d81f013ae6a505982c1c410"), "name" : "TCS", "qty" : 200, "price" : 2000 }
    { "_id" : ObjectId("5d81f013ae6a505982c1c411"), "name" : "Wipro", "qty" : 3500, "price" : 300 }
    { "_id" : ObjectId("5dbea5dd608aba164b7c8698"), "name" : "TCS", "qty" : 0, "price" : 800 }
    { "_id" : ObjectId("5dbea5dd608aba164b7c8699"), "name" : "TCS", "qty" : 0, "price" : 2000 }
    { "_id" : ObjectId("5dbea5dd608aba164b7c869a"), "name" : "TCS", "qty" : 4500, "price" : 300 }
    db.stocks2.find()
    { "_id" : ObjectId("5d81f0ceae6a505982c1c412"), "name" : "Infosys", "qty" : 300, "price" : 800 }
    { "_id" : ObjectId("5d81f0ceae6a505982c1c413"), "name" : "TCS", "qty" : 300, "price" : 2000 }
    { "_id" : ObjectId("5d81f0ceae6a505982c1c414"), "name" : "Wipro", "qty" : 4500, "price" : 300 }

1 Ответ

0 голосов
/ 03 ноября 2019

Я думаю, что это невозможно .

Единственное, что в монго можно использовать для запроса других коллекций из одной коллекции, это $lookup, длячто вам также понадобится ссылающийся ключ и упомянутый ключ в соответствующей коллекции ( в вашей коллекции нет таких ).

Даже предоставление фиктивного ключа в localField и foreignField на этапе поиска $ будет извлекать данные из stock1, когда мы запрашиваем акции, но структура всего результата будет очень странной и ухудшится только при попыткеполучить данные из акций2. Вам потребуется много дублирующихся документов, и вам придется много пост-обработки, чтобы отфильтровать результат и представить его в правильном формате.

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

Или вы можете изменить схему и попробовать добавить ключи для ссылки на другую коллекцию из одной коллекции.

ПРЕДЛОЖЕНИЕ:

Из ваших данных в акциях, акциях1, акциях2, они имеют одинаковые поля,

, так почему бы не объединить их в одну коллекцию mainStocks ,

, так что mainStocks имеет все доки из всех трех акций: акции1, акции2 И будут иметь все новые документы, которые должны быть вставлены либо вакции или акции1 или акции2.

В основном, все операции CRUD должны выполняться на mainStocks, которые выполняются на акциях, акции1, акции2.

...