yopp
Там есть такой параметр resume token, можно его как-то привязать к записи(Вычислить по определенной записи)
https://docs.mongodb.com/manual/reference/change-events/#change-stream-output _id Metadata related to the operation. Use this document as a resumeToken for the resumeAfter parameter when resuming a change stream.
yopp
На всякий случай, не забывайте что оплог не вечный. resumeAfter ограничен oplog window
Aleksandr
@yopp но oplog упирается в размер
Aleksandr
да
yopp
Волшебства не бывает. Если вам надо очереди с гарантией доставки, то вам лучше использовать другой инструмент
Aleksandr
cap collections
Aleksandr
которые сейчас и юзаю
yopp
На мой взгляд монга для очередей не совсем подходящее решение. Change Stream скорее о том, как подписаться на изменения документа, например при совместной работе. Никаких гарантий монга не даёт. Это даже близко не AMQP или подобное
Aleksandr
Нет
Aleksandr
я не юзаю это как очередь
Aleksandr
нужно смотреть что добавлено и изменено в базе в определенных коллекциях
Aleksandr
например мне нужно получать историю за n время
Aleksandr
cap collections делают это превосходно
Aleksandr
@yopp спасибо, буду дальше сам разбираться, вы подали мне идею, что, возможно, стоит и юзать. cs с очередью
yopp
В целом если вы можете гарантировать что ваше приложение восстановиться, даже если если оно выпало за оплог, то change stream для вас. Можно даже без change stream, а просто оплог читать.
️lefrotite
В монго есть оператор ИЛИ?
️lefrotite
Не для условий, а для полей
Zloy-Dobry
$or | $in
Nickolay
В монго есть оператор ИЛИ?
вы об этом? > db.test.find({'$or':[{'field':{'$eq':'value'}}, {'field':{'$eq':'value1'}}]}) { "_id" : ObjectId("5a9f9528be2c489192445182"), "field" : "value" } { "_id" : ObjectId("5a9f952bbe2c489192445183"), "field" : "value1" }
Nickolay
В монго есть оператор ИЛИ?
или так > db.test.find({'field':{'$in':['value', 'value1']}}) { "_id" : ObjectId("5a9f9528be2c489192445182"), "field" : "value" } { "_id" : ObjectId("5a9f952bbe2c489192445183"), "field" : "value1" }
️lefrotite
Например, поле name $exists:True or = 123
Nickolay
да, взгляните на первый мой ответ, просто измените операторы
️lefrotite
name:{or:[{$exists:True},{$eq:123}]}
Nickolay
ну что-то типа такого, да. Только не совсем понятно, зачем $eq 123, по первому условию всё равно все документы сматчит, которые это поле имеют
️lefrotite
Ой, там False должно быть
Nickolay
тогда да, все верно
Nickolay
{`$or:[{‘name’:{‘$exists’:false}}, {‘name’:’123’}]`
Мечтатель
Мечтатель
Зачем так?
А. Понятно. Сорри
Ilya
Всем добрый день. Подскажите пожалуйста если вместо ObjectId я решил использовать cтроковое представление uuid для "_id" - помешает это както при репликации ?
Nick
никак
Nick
единственно наверное индекс будет пожирнее по _id, а так никаких проблем
Ilya
то есть то что в objectid содержится информация по машине на которой запущен данный инстанс никак не играет роль в репликации)
yopp
то есть то что в objectid содержится информация по машине на которой запущен данный инстанс никак не играет роль в репликации)
на _id есть всего два ограничения: размер в BSON не более 1024 байта и уникальность в пределах одной коллекци
Ilya
ну тогда вроде все ок
Ilya
спасибо
yopp
Но я спрошу на всякий случай: а зачем?
Ilya
про uuid?
Ilya
надо данные из другой БД перетащить там uuid - вот и думаю есть ли смысл его использовать
Ilya
если есть минусы данного решения то готов их услышать)
yopp
objectid и uuidv4 оба являются псевдослучайными идентификаторами. разница только в размере. ObjectId — 12 байт, UUIDv4 — 16 байт binary или 36 байт string
yopp
у UUID больше энтропия, 122 байта
yopp
у objectid энтропия 96 байт и там известен алгоритм генерации «псевдослучайных» чисел. в итоге энтропия нужна исключительно для расчёта коллизий
Ilya
ну это понятно, прото у меня два варианта или в документе будет только uuid или будут оба. потому что отказаться от uuid не могу т.к. этот сервис уже используется
Nick
ну это понятно, прото у меня два варианта или в документе будет только uuid или будут оба. потому что отказаться от uuid не могу т.к. этот сервис уже используется
просто определитесь допустимо ли дублирвоание uuid-ов для разных записей, если нет, то можно использоват ьвместо ид
Nick
и если вам не потребуется самостоятельно создават ьподобные записи у себя в системе, а только синкать их из другой
Ilya
В общем я все понял)
Aleksandr
всем привет, небольшой вопрос про aggregation
Aleksandr
есть вот такой объект conversation
Aleksandr
Aleksandr
который в себе содержит user id
Aleksandr
вот юзеры
Aleksandr
Aleksandr
почему в этом случаее мне возвращаються все юзеры а не один?
Aleksandr
Aleksandr
если foreignField сменить с id на _id то вообще ничего нету
Aleksandr
Anonymous
Всем привет.у меня есть проблема. Есть база,есть collection var express = require('express'); var bodyParser = require('body-parser'); var app = express(); var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/company'); var Company = mongoose.model('Company',mongoose.Schema({ name: String, dept: String, area: String, status: String, contact: String, salary: String })); app.use(bodyParser.urlencoded({extended : true})); app.use(bodyParser.json()); app.get('/api/list',function (req,res) { Company.find(function(err,list){ if(err) res.send(err); res.json(list); console.log('working..'); }); }); app.listen(3000,function(){ console.log('Server is Running on port 3000'); }); почему я не видеть с данных базы.
Aleksandr
может мне кто-то подсказать, а то я новичек в монге
Nick
Проблема в том что юзер_id должен быть того же типа что и _id
Aleksandr
Aleksandr
Nick
а вы вкурсе что в конверсашнах нет поля user_id
Nick
а есть users_id
Nick
localField в лукапе нормально пропишите
Aleksandr
блин
Aleksandr
спасибо вам большое
Nick
и набор user_id обычно называют user_ids а не users_id
Aleksandr
спасибо болшьшое
Nick
А какие параметры ты в find() передаешь посмотри !
если открыть как определн find в query в монгусе: Query.prototype.find = function(conditions, callback) { if (typeof conditions === 'function') { callback = conditions; conditions = {}; }
Nick
короч кондишн не обязателен
Nick
хотя наверн там модель, но сут ьта же Model.find = function find(conditions, projection, options, callback) { if (typeof conditions === 'function') { callback = conditions; conditions = {}; projection = null; options = null; } else if (typeof projection === 'function') { callback = projection; projection = null; options = null; } else if (typeof options === 'function') { callback = options; options = null; }
Defragmented
Всем привет. Сколько весит монго джс если я попытаюсь ее в браузер вставить?
Nick
линку в студию
Defragmented
Пакет для nodejs если его упаковать например browserify, сейчас поищу
Defragmented
А, пардон, монго требует отдельной программы?
Nick
Конечно