Определите правильный запрос MongoDB из журнала - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь определить запрос, отправленный из веб-приложения в MongoDB , который я установил локально.

Моя цель - преобразовать запрос таким образом, чтобы я мог выполнить его непосредственно из клиента MongoDB. Я уже зарегистрировал следующий запрос:

2019-10-17T14:03:31.267+0200 I COMMAND  [conn150] command fact_main.file_objects command: aggregate { aggregate: "file_objects", pipeline: [ { $unwind: "$processed_analysis.software_components.summary" }, { $match: { virtual_file_path.885884fa4e7e3027c378119e5f53d7ee06221f3245c952d793c1d9bd851fef0e_23409011: { $exists: "true" } } }, { $group: { _id: "$processed_analysis.software_components.summary", additional_information: { $addToSet: "$_id" } } }, { $sort: { _id: 1 } } ], cursor: {}, lsid: { id: UUID("12e1cd2c-9de7-494c-a850-3b4142ead110") }, $db: "fact_main", $readPreference: { mode: "primaryPreferred" } } planSummary: COLLSCAN keysExamined:0 docsExamined:4010 hasSortStage:1 cursorExhausted:1 numYields:31 nreturned:7 reslen:1237 locks:{ Global: { acquireCount: { r: 66 } }, Database: { acquireCount: { r: 33 } }, Collection: { acquireCount: { r: 33 } } } protocol:op_msg 38ms

По крайней мере, получение первой части запроса мне очень помогло бы, но я потерпел неудачу.

1 Ответ

1 голос
/ 17 октября 2019

Я думаю, что это запрос агрегации (и может быть запущен из mongo shell ). Убедитесь, что вы подключены к нужной базе данных и опция предпочтения чтения установлена, если вы подключаетесь к реплике (см. Примечания ниже):

db.file_objects.aggregate( [ 
{ $unwind: "$processed_analysis.software_components.summary" }, 
{ $match: { 
   "virtual_file_path.885884fa4e7e3027c378119e5f53d7ee06221f3245c952d793c1d9bd851fef0e_23409011":  
    { $exists: "true" }
   }
}, 
{ $group: { 
        _id: "$processed_analysis.software_components.summary",
        additional_information: { $addToSet: "$_id" } 
    } 
}, 
{ $sort: { _id: 1 } } 
] )


Существуют и другие детали:

  • Я думаю, "fact_main" - это база данных ($ db: "fact_main").
  • Указано предпочтение чтения , $readPreference: { mode: "primaryPreferred" } }. Это означает, что запрос выполняется к replica-set . Вы можете указать предпочтение чтения, если вы работаете с набором реплик. В противном случае, если это просто автономная база данных , вы можете проигнорировать эту опцию (я думаю). Как вы устанавливаете предпочтение чтения? Попробуйте это: db.getMongo().setReadPref("primaryPreferred");
  • planSummary: ..., это план запроса для выполненного запроса. Если вы хотите запустить план запроса с запросом агрегации, вы можете использовать следующий синтаксис: db.collection_name.explain().aggregate( [ ... ] ). Это не запустит запрос, только план запроса. Также см. Другие explain() методы режимы .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...