Максим
Блин, это фигня.
Андрей
Андрей
В логе нет причины?
Андрей
Какая версия ОСи?
Гена
Андрей
Убунта 18.
Сейчас обновился до 20, вечером буду смотреть.
1. apt-get install libcurl4 openssl liblzma5
2. Качаете архив бинарников.
3. tar -zxvf mongodb-linux-*-4.4.1.tgz
4. Создаете путь для базы
5. Напиливаете конфиг
6. Стартуете и работаете
Т.к. лога никто не увидел, то как бы вот.
Андрей
Starting in MongoDB 4.4, a startup error is generated if the ulimit value for number of open files is under 64000.
Максим
yopp
А вы пробовали по официальной инструкции для убунты ставить?
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
Anton
Странно не могу найти как без костылей сделать update последнего документа в коллекции
Anton
Может кто знает
yopp
yopp
yopp
Вам необходимо выбрать поле для сортировки, отсортировать в обратном порядке и взять первый документ
Anton
в update вообще нельзя ничего из этого передать
Anton
yopp
Там есть sort
yopp
По этому полю можно сделать индекс с обратным порядком, тогда будет быстро
yopp
Но без транзакций, нет гарантии что выбранный документ действительно «последний»
yopp
Как впрочем и с транзакциями
yopp
Вероятно у вас какие-то проблемы с правами при установке
Максим
Максим
теперь вручную создавать папки логов, дата, и конфиг. А пользователя какого им ставить? mongodb? или своего юзера?
облазил уже весь гугл.
Vadim
cat /etc/mongod.conf =>
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
Указан путь логов
Максим
Максим
ну вроде так и делал раньше
Андрей
Вот поэтому, когда понятия не имеете что и как оно делает при установке из реп и тем более спустя 2 дня вы только узнали, что у вас лог файла даже нет и конфига, делать нужно всё руками (либо собирать из сырцов либо на готовых бинах) под одной крышей удобно и просто, а не расплевывать по всей ФС бины, конфиги, логи, бд файлы и не знать что где лежит и зачем-то облазить весь гугл, когда всё делается как 2 пальца.
Андрей
Распакуйте бины, создайте конфиг, дир для бд и всё, дальше старт бина на конфиге
Андрей
От любого какого хошь юзера, у которого будут все права на каталог с базой и лог файл
Максим
Максим
вот лог сейчас
{"t":{"$date":"2020-10-09T12:19:45.449+03:00"},"s":"I", "c":"CONTROL", "id":23285, "ctx":"main","msg":"Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'"}
{"t":{"$date":"2020-10-09T12:19:45.522+03:00"},"s":"W", "c":"ASIO", "id":22601, "ctx":"main","msg":"No TransportLayer configured during NetworkInterface startup"}
{"t":{"$date":"2020-10-09T12:19:45.522+03:00"},"s":"I", "c":"NETWORK", "id":4648601, "ctx":"main","msg":"Implicit TCP FastOpen unavailable. If TCP FastOpen is required, set tcpFastOpenServer, tcpFastOpenClient, and tcpFastOpenQueueSize."}
{"t":{"$date":"2020-10-09T12:19:45.522+03:00"},"s":"I", "c":"CONTROL", "id":23330, "ctx":"main","msg":"ERROR: Cannot write pid file to {path_string}: {errAndStr_second}","attr":{"path_string":"/var/run/mongodb/mongod.pid","errAndStr_second":"No such file or directory"}}
Максим
оно что, не может свой пид записать?
Максим
Устанавливаю по оф доке. Что же я сделал не так?
Андрей
А демон автозапуска тоже руками писать?
Вы имеете ввиду инит, чтобы поднимали как service mongod start или о каком автозапуске речь? Никакого автозапуска применительно к БД! Хотя какие-нибудь девопсы могут с этим поспорить)
Максим
Максим
Никакого автозапуска применительно к БД!
Почему?
Максим
при ребуте сервера руками поднимать бд каждый раз?
Максим
Андрей
Андрей
Максим
Максим
почему?
Max
Приветствую! Подскажите, как в монге создать запрос:
db.test.insertMany([
{ name: "n1", a: 10, b: 20 },
{ name: "n2", a: 30, b: 400 },
])
, требуется найти все документы, где поле_a > (поле_b - 20)
P.S. Нашел решение: db.test.find({"$expr": {"$gt": ["$a", {"$subtract": ["$b", 20]}]}})
Андрей
почему?
В смысле? Вы это делаете для поиграться/поучиться или для боя? Вам нужно остановить базу для каких-нибудь регламентов, что-то поконфигурить на "железке", перевалить систему, что-то еще поделать до того, как поднять бд, а у вас при каждом укладывании базы она будет автоматом подниматься. Хотя, может это я один здесь такой олдскульный, но мне это еще проблем не приносило.
Максим
Андрей
Вы про разные вещи спрашиваете - рега в системе инициализации для простого старта/стопа процесса и автостарт процесса субд
Максим
Всё, завелась.
нужно было создать четыре папки и конфиг плюс поменять им владельца на монгу 😎
Максим
maxsimych
Привет, не совсем понял, то есть монгус рекомендует не использовать методы индекса в продакшене, а всё выставлять через mongodb shell/compass ?
Max
Подскажите, можно ли в монге в запросе использовать текущую дату и другое поле?
Имеются данные:
db.test.insertMany([
{ name: "n1", interval: 10, checked_at: new ISODate("2019-10-10 12:12:12") },
{ name: "n2", interval: 20, checked_at: new ISODate("2020-10-10 12:12:12") },
{ name: "n3", interval: 30, checked_at: new ISODate("2020-10-10 12:12:12") }])
Требуется найти все документы, у которых checked_at старше, чем текущая дата минус кол-во секунд, которое в поле interval.
Схематично запрос выглядит так:
db.test.find({"checked_at": {"$lt": "$NOW - $interval(seconds)"}})
Обычно всегда когда работал с датами, саму дату я генерил на уровне приложения. А тут я это сделать не могу, так как надо отнять кол-во секунд, которое для каждого документа уникальна и лежит в поле $interval.
Андрей
не понял почему разные. системди и то и другое делает.
Автомобиль тоже может без водителя ездить, но эта функция существует отдельно. Работать со стартом/стопом процессов через систему инициализации также можно без автозагрузки. Поэтому отдельные друг от друга вещи.
Максим
Спасибо всем за помощь!
Ilya
Подскажите, можно ли в монге в запросе использовать текущую дату и другое поле?
Имеются данные:
db.test.insertMany([
{ name: "n1", interval: 10, checked_at: new ISODate("2019-10-10 12:12:12") },
{ name: "n2", interval: 20, checked_at: new ISODate("2020-10-10 12:12:12") },
{ name: "n3", interval: 30, checked_at: new ISODate("2020-10-10 12:12:12") }])
Требуется найти все документы, у которых checked_at старше, чем текущая дата минус кол-во секунд, которое в поле interval.
Схематично запрос выглядит так:
db.test.find({"checked_at": {"$lt": "$NOW - $interval(seconds)"}})
Обычно всегда когда работал с датами, саму дату я генерил на уровне приложения. А тут я это сделать не могу, так как надо отнять кол-во секунд, которое для каждого документа уникальна и лежит в поле $interval.
вам бы поле это добавить в котором уже раница храница времени и интервала
Max
вам бы поле это добавить в котором уже раница храница времени и интервала
Хм. А как можно добавить поле, которое будет иметь значение NOW() - $interval. Это ж динамическое значение.
На СО подсказали с решением:
db.test.aggregate([
{
$match: {
$expr: {
$lt: ["$checked_at", { $subtract: ["$$NOW", { $multiply: ["$interval", 1000] }] }]
}
}
}
])
Максим
есть такой варнинг — Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
Скажите насколько это важно? если не менять фс, просто будет медленее работать?
Max
вам бы поле это добавить в котором уже раница храница времени и интервала
С производительностью будет скорее всего беда при этом решении, индексы тут скорее всего не помогут. Но в моем случаее это не проблема, данных там не очень много. И поэтому добавить отдельное поле для решения вопроса производительности — это имело бы смысл. Но как можно добавить поле, которое зависит от текущего времени?
Ilya
Подскажите, можно ли в монге в запросе использовать текущую дату и другое поле?
Имеются данные:
db.test.insertMany([
{ name: "n1", interval: 10, checked_at: new ISODate("2019-10-10 12:12:12") },
{ name: "n2", interval: 20, checked_at: new ISODate("2020-10-10 12:12:12") },
{ name: "n3", interval: 30, checked_at: new ISODate("2020-10-10 12:12:12") }])
Требуется найти все документы, у которых checked_at старше, чем текущая дата минус кол-во секунд, которое в поле interval.
Схематично запрос выглядит так:
db.test.find({"checked_at": {"$lt": "$NOW - $interval(seconds)"}})
Обычно всегда когда работал с датами, саму дату я генерил на уровне приложения. А тут я это сделать не могу, так как надо отнять кол-во секунд, которое для каждого документа уникальна и лежит в поле $interval.
ну я имел ввиду заведите просто рядом с полем checked_at поле checked_at_diff в которое записывайте checked_at + interval, и делайте выборку checked_at_diff < now
Max
Pavlo
Всем привет, можно как то сделать запрос чтобы в ответ получить документ где в масиве нет какого то значения, то есть,
{
...
Likes : {
....
users: [... ]
}
...
}
И есть например юзер "vasya" как сделать запрос так чтобы если в масив есть юзер то ничего не вернуло а если нет, то вернуло, одним запросом ?
no
$in?
no
$nin?
Pavlo
🔰ш
Всем привет! Как можно найти конкретные пересечения используя массив геометрий?
Pavlo
$nin?
Спасибо, все работает так как надо
🔰ш
То есть допустим есть схема типа:
{
geometries: [{geometry: polygon}, ...]
}
при запросе {
geometries.geometry: {
$geointersects: polygon
}
}
выдача будет список документов, а хотелось бы как-то отфильтровать чтобы выдавались именно геометрии
🔰ш
Можно конечно сделать отдельную таблицу, где будет идти отношение геометрий к документам, но нафиг мне тогда документоориентированная субд?)
🔰ш
Думаю тут запрос не специфичен для геометрии, есть ли в принципе способ выдать в результатах поиска именно nested документы?
Евгений
добрый день
есть простой запрос
$cursor = $mongo->find(array(
'friends' => $friend_id,
),array(
'sort' => array(
'_at' => 1,
)
));
странная ситуация - при разных значениях $friend_id то работает, то нет
ошибка такая
failed to send find command with database socket error or timeout
я бы понял, если бы ошибка выскакивала при любом значении, но нет
при большинстве значений все нормально, а при некоторых, я даже отправить запрос не могу
кто-то может подсказать, в чем дело?
Ilya