
User ?
31.07.2018
20:41:56

Slava
31.07.2018
20:48:37
а вот кстати в драйвере от монги(компании), id таки будет возвращаться
https://github.com/mongodb/mongo-go-driver/blob/f172d2723583a272b0b928134b79f5551e3129f5/mongo/results.go#L22

AstraSerg
31.07.2018
20:51:54

Slava
31.07.2018
20:52:56

Google

AstraSerg
31.07.2018
21:05:04
почему "дич"? я ничего плохого в генерации id на клиенте не вижу
Особенно, учитывая,что upsert его возвращает ( https://godoc.org/launchpad.net/mgo/v2#Collection.Upsert ) А дич, потому что на мой взгляд логично, что БД возвращает итог операции. Для инсерта критические данные - это id, поэтому и сказал. Но возможно ошибаюсь...

Sergey
31.07.2018
21:32:11
В шардированной не по _id коллекции можно запросто получить несколько документов с одинаковым _id в разных шардах.


Constantin
31.07.2018
21:51:58
Как бы вам это не казалось дичью но в целях производительности монга работает по принципу выстрелил в нее и забыл
Это накладывает требование генерации _id на стороне клиента, а не монги. Собственно клиентом является драйвер, и генерирует _id по-сути он
Вот из документации «MongoDB clients should add an _id field with a unique ObjectId»
ObjectIds are small, likely unique, fast to generate, and ordered. ObjectId values consist of 12 bytes, where the first four bytes are a timestamp that reflect the ObjectId’s creation. Specifically:
a 4-byte value representing the seconds since the Unix epoch,
a 3-byte machine identifier,
a 2-byte process id, and
a 3-byte counter, starting with a random value.


yopp
31.07.2018
23:53:18

Rustam
31.07.2018
23:56:43
Монга гарантирует порядок id. На клиенте, если у вас распределенная система - этого не добиться. Так что, про генерацию на клиенте - глупость.

yopp
01.08.2018
00:23:46

Andrew
01.08.2018
00:34:44
Всем привет! Была монга в stand alone, врубил репликацию и добавил инстанс rs.add(). Прикол в чем, на мастере и на слэйве одна и та же коллекция, в которую ничего нового не записывается, имеет разное число документов, если верить db.collName.count()
Это вообще законно?

Google

Roman
01.08.2018
04:51:09
подскажите кто работает с монгой на уии2
есть задача
нужно выбрать из коллекции записи с максимальной датой сгруппированых по ид парента и потом отсеять записи с ненужным статусом
делаю вот так
$data = $collection->aggregate([
[
'$match' => ['user_id' => $owner],
],
[
'$group' => [
'_id' => ['dialogue_id' => '$dialogue_id'],
'max' => ['$max' => '$created_at']
],
],
]);
получаю
[
{
"_id": {
"dialogue_id": {
"$oid": "5b5ff2c86784e9000772901a"
}
},
"max": {
"$date": {
"$numberLong": "1533041728000"
}
}
},
...
}]
собствено вопрос: как откинуть данные с ненужным статусом и как получить данные коллекции а не непонятно че)))??

Николай
01.08.2018
05:10:57
Всем привет. Подскажите пожалуйста как можно получить колличество документов в коллекции.

Bro
01.08.2018
05:35:24
db.collName.count()

Roman
01.08.2018
05:42:13
как после группировки вывести дополнительное поле?

Николай
01.08.2018
05:47:32

AstraSerg
01.08.2018
05:48:57
@ya_kostya ...монга просит, чтобы _id генерился клиентом, если его нет сгенерирует его сама Ну это меняет дело, тогда это не баг, а фича :) Да вот только, если БД сгенерила id сама, то почему бы его и не отдать в результате операции?

Roman
01.08.2018
05:52:29
да но после группировки то что в проджекте игнорируется

AstraSerg
01.08.2018
05:53:09

Roman
01.08.2018
05:53:52
т.е. например я выбрал данные по определенному пользователю. говорю дай мне поле ид_диалога, статус, и время. после чего делаю группировку ипо ид диалога и по максимальному времени
и у меня на выходе 2 поля всего

AstraSerg
01.08.2018
05:54:31

Roman
01.08.2018
05:54:57
после группировки мне нужно было бы отфильтровать еще и по статусу! но посколько этого поля нет в выдачи я получаю пустой массив

AstraSerg
01.08.2018
05:56:01

Roman
01.08.2018
05:56:42
jy hf,jnftn njkmrj c ntvb gjkzvb rjnjhst dthyekf uheggbhjdrf
он работает с теми полями которые вернула группировка

AstraSerg
01.08.2018
05:57:46

Roman
01.08.2018
05:58:38
но тогда будут лишние записи

Google

AstraSerg
01.08.2018
06:00:56
но тогда будут лишние записи
Лишние не берите, только те, которые вам нужны. Вот здесь подобную проблему решают https://stackoverflow.com/a/35177196/2733113

Roman
01.08.2018
06:02:42
"parentId": { "$first": "$parentId"}
во возможно это то что мне нужно
спасибо большое
пойду пробовать

AstraSerg
01.08.2018
06:05:20

Roman
01.08.2018
06:09:09
хорошо спасибо! щас почитаю что такое пуш) после sql както тяжковато для понимания)


Sergey
01.08.2018
06:26:23
Никакой разницы в механизме генерации ObjectId нет. Никаких дополнительных проверок не производится. Вероятность коллизий в обоих случаях будет одинаковой.
В теории, да, никакой разницы. Однако на практике, есть несколько "но". Во-первых, каждый драйвер может, в силу багов или ограниченности сознания разработчика, иметь своё видение уникальных ObjectId. Во-вторых, любой разработчик может сам формировать ObjectId для своих документов, минуя монгу и драйвер. Это про ответственность клиента за уникальность. В-третьих, кластер монги имеет больше технических возможностей из коробки, чтобы засинхронизировать machineId в ObjectId, реально гарантировав уникальность ObjectId в кластере.
Никаких механизмов сейчас на стороне сервера нет. Есть некоторое подобие, _checkOIDs в балансере, но он может помочь только с теми ObjectId, которые генерируются на mongod, а не на mongos. Есть обещание уникальности в спеке: https://docs.mongodb.com/manual/reference/glossary/#term-id.
С одинаковой вероятностью коллизий не соглашусь. Вероятность коллизий возрастает с ростом количества процессов, генерирующих _id. В больших кластерах процессов mongod и mongos обычно поменьше, чем клиентских процессов.


Rustam
01.08.2018
07:06:40


Артём
01.08.2018
07:10:16
Всем привет. Коллеги случайно сделали db.orders.deleteMany({}), а бэкапов конечно же нет. Есть ли какая возможность восстановить данные?

AstraSerg
01.08.2018
07:11:56
хорошо спасибо! щас почитаю что такое пуш) после sql както тяжковато для понимания)
в пуше ничего сложного: он берёт все значения определённого поля из группы и делает из них список, который и возвращает. То есть предположим вы группируете по полю product. У вас получилось 3 продукта по 10 строк в каждом. Ещё вам нужно понять, какие страны у этих продуктов. Тогда делаете пуш и получаете список из стран каждого из 3 продуктов. Надеюсь, понятно :)

Roman
01.08.2018
07:13:26

AstraSerg
01.08.2018
07:18:40

Roman
01.08.2018
07:20:09
ну вот мне нужны были данные по которым нужно было фильтрануть еще раз после группировки. ну и какбы эти данные нужны были! а взять первый или последний не понятно насколько актуально и нужно сортировать
в самой группировки сортировки я не нашел. поэтому сортирнул до
надеюсь это корректно будет

AstraSerg
01.08.2018
07:23:45

Roman
01.08.2018
07:24:14
я читал но не оч понял что он делает))

Andrew
01.08.2018
07:25:38
Условно говоря превращает один документ с массивом в несколько документов равных количеству элементов в массиве

AstraSerg
01.08.2018
07:25:48

Google

Andrew
01.08.2018
07:25:53
Типа каждый с каждым элементом массива
Точно :)

Roman
01.08.2018
07:26:52
а ну у меня там списков вроде небыло)
полычается если поле массив то он преобразует его в отдельные множества?
вообщем это нужно пробывать чтобы понять))

AstraSerg
01.08.2018
07:27:58

Roman
01.08.2018
07:28:38
а ну да
впринципе понятно

AstraSerg
01.08.2018
07:28:59

Roman
01.08.2018
07:29:02
вот тут вроде норм расписано https://habr.com/post/139643/

AstraSerg
01.08.2018
07:29:26

Roman
01.08.2018
07:30:28
спасибо вам большое)

AstraSerg
01.08.2018
07:30:54

Constantin
01.08.2018
07:41:28


yopp
01.08.2018
08:53:13
Вы сейчас на 880 человек транслируете свои ошибочные рассуждения.
0) Совершенно не важно что используется как значение _id. Есть сколько ограничений накладываемых уникальным индексом. Но кроме ObjectId может использоваться всё что угодно. Это никак не влияет на гарантии.
1) Нет никакого «видения уникальности». Есть спецификация генерации OID. Да, не все реализации соблюдают спецификации. Но см. п 0
2) Нет никакой отвественности клиента за уникальность. Уникальный индекс даёт одинаковые гарантии уникальности вне зависимости от того, какое значение и где оно появилось.
3) Никаких дополнительных «технических возможностей» в кластере нет. Есть архитектурные ограничения. Например в шардированном окружении может не быть гарантии уникальности _id.
4) Вероятность коллизии никак не меняется о того где и как генерируются идентификаторы


Gleb
01.08.2018
09:16:13


Юрий
01.08.2018
10:17:50
Привет! Не подскажите ли, как можно решить проблему, с ошибкой
"can't take a write lock while out of disk space"
не даёт ни удалять документы, ни апдейтить ни дропать.
только поиск работает.
админских прав к удалённому серверу нет. Наружу торчит только монга.
Всё, справились. Но если есть способ решить это из оболочки, то поделитесь)

yopp
01.08.2018
12:00:15

Google

agic
01.08.2018
13:16:05
добрый день коллеги, смотрите такой вопрос я делаю db.name.drop() удаляются ли также построенные индексы ?
или индексы остаются?

yopp
01.08.2018
13:20:31

agic
01.08.2018
13:21:10
спасибо большое


Andrew
01.08.2018
14:49:44
А что говорит rs.status() ?https://docs.mongodb.com/manual/reference/method/rs.status/
/ 1 / { "set" : "mongodb", "date" : ISODate("2018-08-01T14:59:30.808+03:00"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "172.0.0.1:27019", "health" : 1.0, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 2345125, "optime" : Timestamp(1533124770, 492), "optimeDate" : ISODate("2018-08-01T14:59:30.000+03:00"), "electionTime" : Timestamp(1530779646, 1), "electionDate" : ISODate("2018-07-05T11:34:06.000+03:00"), "configVersion" : 3, "self" : true }, { "_id" : 1, "name" : "172.0.0.2:27019", "health" : 1.0, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 85714, "optime" : Timestamp(1533124769, 278), "optimeDate" : ISODate("2018-08-01T14:59:29.000+03:00"), "lastHeartbeat" : ISODate("2018-08-01T14:59:29.520+03:00"), "lastHeartbeatRecv" : ISODate("2018-08-01T14:59:29.094+03:00"), "pingMs" : 2, "syncingTo" : "172.0.0.1:27019", "configVersion" : 3 } ], "ok" : 1.0 }
Некоторые коллекции вроде среплицировались нормально, а в одной разница на 4к документов. Несколько сот миллионов всего
Может count() какие-то погрешности даёт, или реально на одной банке документов больше...


Slava
01.08.2018
15:20:13

Andrew
01.08.2018
15:41:19