Max
собственно вопрос - есть запрос:
await Statistic.aggregate([
{
$match: { frame: 'driverCancelReasons', ...filter },
},
{
$group: {
_id: `$perDay.Incorrect request`,
count: { $sum: `$perDay.Incorrect request` },
},
},
]);
Подскажите, почему я получаю по две записи в результатах групировки вместо одной
Max
даже не так
Max
больше 1:
"User taking too long to come to me": [
{
"_id": 6,
"count": 6
},
{
"_id": 2,
"count": 4
},
{
"_id": 5,
"count": 10
},
{
"_id": 11,
"count": 11
},
{
"_id": 4,
"count": 8
},
{
"_id": 8,
"count": 8
},
{
"_id": 0,
"count": 0
},
{
"_id": 1,
"count": 4
}
]
Max
по идеее в результате должен быть один объект
Nick
ну а что вы хотите? у вас _id равно тому что вы суммируете
Nick
если хотите один чтобы был то _id:null
Dmytro
по вот этому count: { $sum: $perDay.Incorrect request },
Nick
сейчас вы берете разрез по количеству ошибок и сколько суммарно таких ошибок бывало,
т.е. у вас там есть id:2 но сумма 4 , т.е. суммарно 4 ошибки дляслучаев когда ошибок всего 2
Маfеt
@yopp
Маfеt
А чо терминатора нет тут?
Nick
@dd_bb
Андрей
Почему имея такие данные
{ "_id" : "1", "text" : "hello" } { "_id" : "2", "text" : "hello2", "parent" : "1" } { "_id" : "3", "text" : "hello3", "parent" : "2" } { "_id" : "4", "text" : "hello4", "parent" : "3" }
и такой запрос
db.elements.aggregate( [
{"$graphLookup": {
"from": "elements",
"startWith": "$parent",
"connectFromField": "parent",
"connectToField": "_id",
"as": "parents"
}}
] )
Я получаю
{ "_id" : "1", "text" : "hello", "parents" : [ ] } { "_id" : "2", "text" : "hello2", "parent" : "1", "parents" : [ { "_id" : "1", "text" : "hello" } ] } { "_id" : "3", "text" : "hello3", "parent" : "2", "parents" : [ { "_id" : "1", "text" : "hello" }, { "_id" : "2", "text" : "hello2", "parent" : "1" } ] } { "_id" : "4", "text" : "hello4", "parent" : "3", "parents" : [ { "_id" : "2", "text" : "hello2", "parent" : "1" }, { "_id" : "1", "text" : "hello" }, { "_id" : "3", "text" : "hello3", "parent" : "2" } ] } { "_id" : "5", "text" : "hello5", "parent" : "4", "parents" : [ { "_id" : "2", "text" : "hello2", "parent" : "1" }, { "_id" : "1", "text" : "hello" }, { "_id" : "3", "text" : "hello3", "parent" : "2" }, { "_id" : "4", "text" : "hello4", "parent" : "3" } ] }
В результате не верный порядок родителей для 3 и 4 элемента. Родители по id идут в пордяке 2, 1, 3 ... хотя должны идти 1,2,3 ... В чём может быть проблема?
Nick
сохранять ид юзера в записи и выбирать по ид юзера
Nick
Почему имея такие данные
{ "_id" : "1", "text" : "hello" } { "_id" : "2", "text" : "hello2", "parent" : "1" } { "_id" : "3", "text" : "hello3", "parent" : "2" } { "_id" : "4", "text" : "hello4", "parent" : "3" }
и такой запрос
db.elements.aggregate( [
{"$graphLookup": {
"from": "elements",
"startWith": "$parent",
"connectFromField": "parent",
"connectToField": "_id",
"as": "parents"
}}
] )
Я получаю
{ "_id" : "1", "text" : "hello", "parents" : [ ] } { "_id" : "2", "text" : "hello2", "parent" : "1", "parents" : [ { "_id" : "1", "text" : "hello" } ] } { "_id" : "3", "text" : "hello3", "parent" : "2", "parents" : [ { "_id" : "1", "text" : "hello" }, { "_id" : "2", "text" : "hello2", "parent" : "1" } ] } { "_id" : "4", "text" : "hello4", "parent" : "3", "parents" : [ { "_id" : "2", "text" : "hello2", "parent" : "1" }, { "_id" : "1", "text" : "hello" }, { "_id" : "3", "text" : "hello3", "parent" : "2" } ] } { "_id" : "5", "text" : "hello5", "parent" : "4", "parents" : [ { "_id" : "2", "text" : "hello2", "parent" : "1" }, { "_id" : "1", "text" : "hello" }, { "_id" : "3", "text" : "hello3", "parent" : "2" }, { "_id" : "4", "text" : "hello4", "parent" : "3" } ] }
В результате не верный порядок родителей для 3 и 4 элемента. Родители по id идут в пордяке 2, 1, 3 ... хотя должны идти 1,2,3 ... В чём может быть проблема?
а что не так? если порядок в массиве, то разве он гарантируется?
CherryTea
Nick
А ссылочку можно?
CherryTea
на спеку js ?
Nick
На спеку graphLookup
CherryTea
я про js массив
Nick
Мы в чате про монгу а не про js
CherryTea
моя вина, пойду посплю
Alexander
Я что-то не пойму, как мне понять, что initialSync нормально идёт?
Статус - STARTUP2. "optimeDate" : ISODate("1970-01-01T00:00:00Z")
Alexander
Сетевой трафик присутствует
Alexander
Диск без дела не стоит
Lev
Почему имея такие данные
{ "_id" : "1", "text" : "hello" } { "_id" : "2", "text" : "hello2", "parent" : "1" } { "_id" : "3", "text" : "hello3", "parent" : "2" } { "_id" : "4", "text" : "hello4", "parent" : "3" }
и такой запрос
db.elements.aggregate( [
{"$graphLookup": {
"from": "elements",
"startWith": "$parent",
"connectFromField": "parent",
"connectToField": "_id",
"as": "parents"
}}
] )
Я получаю
{ "_id" : "1", "text" : "hello", "parents" : [ ] } { "_id" : "2", "text" : "hello2", "parent" : "1", "parents" : [ { "_id" : "1", "text" : "hello" } ] } { "_id" : "3", "text" : "hello3", "parent" : "2", "parents" : [ { "_id" : "1", "text" : "hello" }, { "_id" : "2", "text" : "hello2", "parent" : "1" } ] } { "_id" : "4", "text" : "hello4", "parent" : "3", "parents" : [ { "_id" : "2", "text" : "hello2", "parent" : "1" }, { "_id" : "1", "text" : "hello" }, { "_id" : "3", "text" : "hello3", "parent" : "2" } ] } { "_id" : "5", "text" : "hello5", "parent" : "4", "parents" : [ { "_id" : "2", "text" : "hello2", "parent" : "1" }, { "_id" : "1", "text" : "hello" }, { "_id" : "3", "text" : "hello3", "parent" : "2" }, { "_id" : "4", "text" : "hello4", "parent" : "3" } ] }
В результате не верный порядок родителей для 3 и 4 элемента. Родители по id идут в пордяке 2, 1, 3 ... хотя должны идти 1,2,3 ... В чём может быть проблема?
Добавь sort
Андрей
А если нужен порядок обхода
Андрей
Нужен список элементов от корня до заданного
gani
Ребята, как скопировать все содержимое MongoDB сервера, на другой сервер?
gani
С монго не работал вообще
gani
Помогити(
Андрей
https://docs.mongodb.com/v4.0/reference/program/mongodump/
Андрей
Востановление https://docs.mongodb.com/v4.0/reference/program/mongorestore/
Eugene
$lookup stage aggregation framework mongodb
Eugene
google
Eugene
вбей эту фразу в поисковик и понятно станет
P
Всем привет! Прошу прощения за вопрос, возможно он банален, НО, помогите разобраться с проблемой. Для работы я использую mongoose. Когда я пытаюсь обновить данные в документе, я получаю ошибку следующего плана
Unhandled rejection MongoError: E11000 duplicate key error collection: DBName.elements index: _id_ dup key: { : ObjectId('5c88379f2c092f0ba64b6322') }.
При все этом такая ошибка валится не на всех обновляемых элементах. Так-же есть аналогичные обновления в других коллекциях и там все норм. Будьте добры, подскажите как решить такую проблему или где капнуть глубже, ибо пересоздание базы или чистка индексов не помогает
Nick
Nick
или вы пытаетесь принужительно сохранит ьполную копию документа, у которого зачемто оставили поле _id
P
я так и делаю, изначально я пытаюсь найти элемент в коллекции, если я его нахожу, я передаю экзепляр элемента для дальнейшей манипуляции, если же получаю null - то создаю новый элемент
Nick
смотрите, ваша ситуация возможна только в двух случаях:
1. ваш драйвер сошел с ума и генерит _id сам и делает это криво с дубликатами
2. вы вставляете принудительно док, который вытащили из базы, не удалив поле _id или зачемто сами его назначили
впринципе все, дальше рабирайтесь в коде, 95% что второй вариант
P
спасибо
P
мне кажется что вы указали на правильную дверь, я действительно не удаляю из экземпляра _id. Но тогда я в растерянности =)) ибо я думал что оно все умное и будет игнорить такие вещи =)) спасибо большое!
Nick
оно как раз умное и счтает что вы используете какието свои идшники и не ерезатирает их
Андрей
Nick
Nick
$lookup
⌬ Дмитрий ⌬
Коллеги приветствую всех!
Однажды я уже обращался с вопросом о том как внести данные из Json в MongoDB (имеющих различные данные внутри (список и словарь)) и пришли к мнению о том что при внесении необходимо разбирать по полям и только так вносить. Это работает )
Так вот одно из полей осталось смешанным, содержит в себе и списки и словари.
Теперь следующий вопрос: как попробовать искать то или иное значение в документе, при условии что некоторые поля могут повторятся. Для примера приведу небольшой пример.
Часть документа выглядит вот так:
{
....
'data' [['value',{'plain': 'sample data', 'player': 'osor'}],
['text', {'plain': 'same data'}],
['place', {'lat': 45678933, 'lng': 23456789}],
['text', {'plain': 'other data'}],
['place', {'lat': 45678923, 'lng': 23456711}],
['text', {'plain': 'other data 2'}],
['place', {'lat': 56678933, 'lng': 23456700}]],
'timestamp': 1598888888,
....
}
Так вот и стоит задача, к примеру найти значение "other data 2" и вывести значение place (перед ним)
в каждом из документов - значения полей и их количество - может быть разным, но обязательно - минимум одно точно
Может при таких данных, как повторяющиеся значения в поле документа, можно попробовать использовать другой подход?
Возможно ли осуществлять поиск по всем полям сразу? и выводить значения только тех кто попадает под фильтр.
За ранее спасибо
Anonymous
привет
Anonymous
Anonymous
не работает
AstraSerg
а конфиг-то вообще есть?
cat /etc/mongod.conf
Nick
этопро что?
Nick
https://docs.mongodb.com/ecosystem/use-cases/storing-comments/
Nick
https://docs.mongodb.com/manual/core/data-modeling-introduction/
Nick
читайте разбирайтесь
AstraSerg
Коллеги приветствую всех!
Однажды я уже обращался с вопросом о том как внести данные из Json в MongoDB (имеющих различные данные внутри (список и словарь)) и пришли к мнению о том что при внесении необходимо разбирать по полям и только так вносить. Это работает )
Так вот одно из полей осталось смешанным, содержит в себе и списки и словари.
Теперь следующий вопрос: как попробовать искать то или иное значение в документе, при условии что некоторые поля могут повторятся. Для примера приведу небольшой пример.
Часть документа выглядит вот так:
{
....
'data' [['value',{'plain': 'sample data', 'player': 'osor'}],
['text', {'plain': 'same data'}],
['place', {'lat': 45678933, 'lng': 23456789}],
['text', {'plain': 'other data'}],
['place', {'lat': 45678923, 'lng': 23456711}],
['text', {'plain': 'other data 2'}],
['place', {'lat': 56678933, 'lng': 23456700}]],
'timestamp': 1598888888,
....
}
Так вот и стоит задача, к примеру найти значение "other data 2" и вывести значение place (перед ним)
в каждом из документов - значения полей и их количество - может быть разным, но обязательно - минимум одно точно
Может при таких данных, как повторяющиеся значения в поле документа, можно попробовать использовать другой подход?
Возможно ли осуществлять поиск по всем полям сразу? и выводить значения только тех кто попадает под фильтр.
За ранее спасибо
попробуйте:
find({'data': ['text', {'plain': 'other data 2'}]})
Andrey
как в mongo-native для nodejs при вставке явно задать полю тип?
Anonymous
Andrey
монгуз фейлится при авторизации, пароль содержит $, для нативного клиента достаточно экранирования, как быть с монгусом?
Nick
гуглить
Andrey
user, pass через опции если что тоже не работает
Andrey
нужен какой-то энкод декод
Nick
да ладно? первая ссыль на стековерфлоу говорит тоже самое
Andrey
первая ссыль 5 летней давности
Andrey
и эта опция как говорит этот же монгуз устарела, я бы наверное не стал сюда писать
Nick
какая опция устрела?
Nick
сформироват ьправильный урл?
Andrey
uri_decode_auth
Nick
а т.е. ответ от 18 года вы не нашли там?
Andrey
я прогнал пароль через encodeURIComponent ни с опцией, ни без не работает
кто-то там написал что нужна 3я зависимость mongo-uri это так? выглядит слишком для авторизации
Nick
я не удивлюсь если оно там вообще не заработает и будет проще изменить пароль
Nick
какая версия монгуса и скиньте как вы закодили подклчюение?
Andrey
5.4.4
const connString = 'mongodb://AvAdmin:%24Av2019!Bravo@<host>:<port>/<db>';
const conn = mongoose.createConnection(connString, {
useNewUrlParser: true,
});
Nick
а восклицательный знак не хотети тоже заэкранить?
Andrey
Nick
прикольно, не знал что он корректно распознается