Олег
пользуюсь mongoose
там в схеме объяляется
Nick
т.е. вы используете драйверозависимое нечто, а не то что предлагает монга
Nick
вообщем ваш вопрос про таймзоны отправляется к монгусу
Олег
как написал выше, mongoose ссылается на доки в монгу
Nick
киньте этот момент из доки, а то может я чтото путаю
Олег
+ я хотел настроить часовой пояс на уровне БД, а не драйвера
Олег
сейчас найду
Олег
немного неверно ранее написал ... ответ про таймзоны я нашел в репозитории драйвера
https://github.com/Automattic/mongoose/issues/3739#issuecomment-169394514
Олег
там ссылка на доку в монгу
Олег
поскольку монга лежит в докере, и часовой пояс должен быть изменен в рамках этого контейнера, то драйвер по большому счету тут не при чем
изменить нужно на уровне самой БД
Nick
Вот так бы и написали, что вам нужно хранить время с таймзоной. Монга этого не умеет
Олег
Олег
мне не обязательно время хранить с таймзоной
мне важно чтобы само время соответстовало определенному часовому поясу
Олег
да
Олег
как-то так
Nick
Нет, монге фиолетово на таймзоны, хоть как вы их настраивайте на сервере с бд, возьмется время, полученное в момент подготовки запросп в драйвере
AstraSerg
да
имхо, это не задача БД...
Nick
Если вам надо преобразовывать, то ищите либо спец функции у драйвера, либо ручками
Олег
Nick
Олег
еще раз повторюсь, мне не нужно хранить таймзоны, мне нужно время под определенный пояс
Nick
Еще раз, это не к монге, это к приложению и драйверу
Nick
Вот так вот устроена монга, это вам не sql с полноценным timestamp типом данных
Олег
ладно ... всем спасибо
ᅠ ᅠ ᅠ ᅠ
Используя Java Driver, ребят, можно заменить полностью один док на другой, проверяя на совпадение поле?
Вот так высчитываю кол-во док-ов:
long count = collection.count();
Потом заменяю полностью один док на другой (не изменяя поле _id) по полю title:
collection.replaceOne(eq("title", title),
new Document("title", title)
.append("url", url)
.append("img", img)
.append("price", price));
ᅠ ᅠ ᅠ ᅠ
мне кажется, что я неправильно заменяю док, используя replaceOne метод, потому что в примерах монги, изменялся текст значения поля в виде текста, а я пытаюсь по переменной String
ᅠ ᅠ ᅠ ᅠ
ᅠ ᅠ ᅠ ᅠ
я хочу все присутствующие док-и бд заменить на другие, не трогая _id
ᅠ ᅠ ᅠ ᅠ
чтобы не происходило в будущем переполнение кластера
ᅠ ᅠ ᅠ ᅠ
1) https://docs.mongodb.com/manual/tutorial/update-documents/#update-documents, здесь вручную изменяется текст значения поля
2) http://mongodb.github.io/mongo-java-driver/3.8/driver/tutorials/perform-write-operations/
и здесь тоже
AstraSerg
Используя Java Driver, ребят, можно заменить полностью один док на другой, проверяя на совпадение поле?
Вот так высчитываю кол-во док-ов:
long count = collection.count();
Потом заменяю полностью один док на другой (не изменяя поле _id) по полю title:
collection.replaceOne(eq("title", title),
new Document("title", title)
.append("url", url)
.append("img", img)
.append("price", price));
Не совсем понятно, что вы хотите, но может $set вам поможет: https://docs.mongodb.com/manual/reference/operator/update/set/
ᅠ ᅠ ᅠ ᅠ
yopp
yopp
Точнее возможно, если вы знаете все поля в документе, тогда вы можете их удалить/поменять через $set, $unset
yopp
но в этом нет никакого смысла
yopp
если вы хотите новый документ — создайте новый документ
yopp
а старый удалите
ᅠ ᅠ ᅠ ᅠ
Понял, спасибо. Думал, методом replaceOne можно заменить весь документ не изменяя _id поле
yopp
ого. Да, есть replaceOne (https://docs.mongodb.com/manual/reference/method/db.collection.replaceOne/). Это новшество с 3.2.
Не знал
yopp
Тогда в чём проблема?
yopp
а главное, зачем вам это?
ᅠ ᅠ ᅠ ᅠ
Используя Java Driver, ребят, можно заменить полностью один док на другой, проверяя на совпадение поле?
Вот так высчитываю кол-во док-ов:
long count = collection.count();
Потом заменяю полностью один док на другой (не изменяя поле _id) по полю title:
collection.replaceOne(eq("title", title),
new Document("title", title)
.append("url", url)
.append("img", img)
.append("price", price));
Проблема, что у меня не заменяются документы в таком формате хотя ошибок нет
yopp
убедитесь что у вас по переданному условию find что-то возвращает
yopp
вы там пишете про «переполнение кластера». какую проблему вы решаете?
ᅠ ᅠ ᅠ ᅠ
Чтобы не произошло переполнение документов в кластере
yopp
зачем вам нужен старый id?
yopp
«переполнение документов в кластере» это практически недостижимое событие
ᅠ ᅠ ᅠ ᅠ
В моем случае 512 мб заняв документами объем
yopp
а, вас беспокоит не количество документов, а объём базы
yopp
тогда ещё раз спрошу: зачем вам старый id?
yopp
окей, значит вам старый id не нужен. почему бы тогда просто не удалить ненужные документы?
ᅠ ᅠ ᅠ ᅠ
При замене его нельзя использовать
yopp
или использовать capped collection?
yopp
capped collection позволяет ограничить максимальный размер коллекции. самые старые документы будут автоматически удаляться
yopp
https://docs.mongodb.com/manual/core/capped-collections/#create-a-capped-collection
AstraSerg
Это невозможно
$set используется для замены определённых полей. Если сделать update без него, то замениться весь документ. Или я не прав?
yopp
эээ. сделать апдейт без операторов?
AstraSerg
ну да db.aaa.update({_id: 111}, {b:222})
AstraSerg
типа такого
yopp
день открытий. update в отличии от updateOne/updateMany это позволяет
AstraSerg
весь документ с _id: 111 замениться на {_id: 111, b:222}
yopp
да-да
yopp
https://docs.mongodb.com/manual/reference/method/db.collection.update/#replace-a-document-entirely
AstraSerg
только не понятно, откуда тогда вопрос у @invzbl3
yopp
не обращал внимания, так что был не прав
AstraSerg
точнее из буфера терминала :)
ᅠ ᅠ ᅠ ᅠ
ᅠ ᅠ ᅠ ᅠ
На практике хотел попробовать метод replaceOne, но он не заменяет док-и в том виде, в котором я написал почему-то
ᅠ ᅠ ᅠ ᅠ
Используя Java Driver, ребят, можно заменить полностью один док на другой, проверяя на совпадение поле?
Вот так высчитываю кол-во док-ов:
long count = collection.count();
Потом заменяю полностью один док на другой (не изменяя поле _id) по полю title:
collection.replaceOne(eq("title", title),
new Document("title", title)
.append("url", url)
.append("img", img)
.append("price", price));
По сути, мне без разницы даже по какому полю сравнивать и заменять, потому что все документы разные, каждый уникален
AstraSerg
В смысле откуда?)
ну в том смысле, что это дефолтное поведение апдейта, а у вас не получается
ᅠ ᅠ ᅠ ᅠ
Constantin
Насколько я знаю, update будет deprecated, и вместо него нужно будет использовать updateOne, updateMany
Constantin