Size: a a a

2020 April 23

DS

Dmitriy Sinichkin in MongoDB Russian
если вы ожидаете, что за вас напишут код, то это стоит денег
источник

DS

Dmitriy Sinichkin in MongoDB Russian
вам дают подсказки, при помощи которых вы можете сделать нужное вам условие  в update
источник

M

Mishanya in MongoDB Russian
так в этом моя проблема, я попросил как написать условие для вложенного массива в документе, а не на коллекции, как работает энд я и в доке вижу
источник

M

Mishell in MongoDB Russian
Здравствуйте, хочу попросить консультацию по поводу архитектуры приложения.
Я использую mongoose. Перед изменением документа мне нужно обязательно проверять определенные поля.
Проблема - дабл спендинг.
Может произойти ситуация, при которой 2 одинаковых транзакции полетят в базу данных, и в зависимости от результатов проверки - нужно принять только одну транзакцию.

Можно использовать хук типа
schema.pre('updateOne', {
 document: true,
 query: false
}, function() {
 let document = await this.model.findOne(this.getQuery());
 if (document.field) {
   next()
 } else {
   return;
 }
});


Так я получу документ перед его обновлением и проведу проверку. Проблема в том, что если 2 транзакции прилетели одновременно, то в обоих случаях в данном хуке выяснится, что состояние документа одно, после чего обе транзакции применятся. Потому что проверка будет происходить параллельно, а не последовательно. Можно ли как-то избежать такой ситуации?
Я имею ввиду именно на уровне базы данных, а не на уровне приложения.
источник

DS

Dmitriy Sinichkin in MongoDB Russian
Mishanya
так в этом моя проблема, я попросил как написать условие для вложенного массива в документе, а не на коллекции, как работает энд я и в доке вижу
документация все таки не ваше:
db.getCollection("example_collection").updateOne(
   {"string": {$elemMatch: {"date": 1, "type": "b"}}},
   {$inc: {"string.$.something": +1}}
)
источник

DS

Dmitriy Sinichkin in MongoDB Russian
Mishell
Здравствуйте, хочу попросить консультацию по поводу архитектуры приложения.
Я использую mongoose. Перед изменением документа мне нужно обязательно проверять определенные поля.
Проблема - дабл спендинг.
Может произойти ситуация, при которой 2 одинаковых транзакции полетят в базу данных, и в зависимости от результатов проверки - нужно принять только одну транзакцию.

Можно использовать хук типа
schema.pre('updateOne', {
 document: true,
 query: false
}, function() {
 let document = await this.model.findOne(this.getQuery());
 if (document.field) {
   next()
 } else {
   return;
 }
});


Так я получу документ перед его обновлением и проведу проверку. Проблема в том, что если 2 транзакции прилетели одновременно, то в обоих случаях в данном хуке выяснится, что состояние документа одно, после чего обе транзакции применятся. Потому что проверка будет происходить параллельно, а не последовательно. Можно ли как-то избежать такой ситуации?
Я имею ввиду именно на уровне базы данных, а не на уровне приложения.
если вам нужно блокировать документ до момента окончания каких-либо действий над ним, то стоит посмотреть в сторону транзакций: https://docs.mongodb.com/master/core/transactions/
источник

M

Mishanya in MongoDB Russian
Dmitriy Sinichkin
документация все таки не ваше:
db.getCollection("example_collection").updateOne(
   {"string": {$elemMatch: {"date": 1, "type": "b"}}},
   {$inc: {"string.$.something": +1}}
)
вы каждый раз пишете соверешнно разные вещи)

я спрашивал про условие в if, для вложенного массива, эти две вещи, которые вы описали гуглятся за минуту, но вместе они не работают, в этмо проблемес, понимаете ?
источник

DS

Dmitriy Sinichkin in MongoDB Russian
Mishanya
вы каждый раз пишете соверешнно разные вещи)

я спрашивал про условие в if, для вложенного массива, эти две вещи, которые вы описали гуглятся за минуту, но вместе они не работают, в этмо проблемес, понимаете ?
проблема только в вас, как вы поставили задачу так я ее и услышал
источник

DS

Dmitriy Sinichkin in MongoDB Russian
не надо перекладывать с больной головы не здоровую
источник

M

Mishanya in MongoDB Russian
надеюсь таски вы так же не читаете, как мои условия)
источник

DS

Dmitriy Sinichkin in MongoDB Russian
это я так понимаю вместо спасибо?
источник

M

Mishanya in MongoDB Russian
спасибо, но задачу я так и не решил)
источник

DS

Dmitriy Sinichkin in MongoDB Russian
Mishanya
спасибо, но задачу я так и не решил)
а я не заработал миллиард долларов, но это не потому что все вокруг плохие...
источник

M

Mishell in MongoDB Russian
Dmitriy Sinichkin
если вам нужно блокировать документ до момента окончания каких-либо действий над ним, то стоит посмотреть в сторону транзакций: https://docs.mongodb.com/master/core/transactions/
То есть во время транзакции документ не доступен для любых других модификаций и транзакций? Я думал что транзакция в контексте монго это просто объединение нескольких изменений в один запрос, который либо выполнится, либо нет. Спасибо
источник
2020 April 24

ГМ

Гена Миквабия in MongoDB Russian
Коллеги, доброе утро, вопрос такой - документация монги рекомендует использовать файловую систему xfs для WT.
Чем это обусловлено? как я понял, в случае многочисленных параллельных запросов на запись xfs  лучше ext4.
Какие ваши рекомендации будут.
Стоит ли переходить с ext4 на xfs?
источник

R

RusaXXX in MongoDB Russian
 Mongo connect error { MongoNetworkError: failed to connect to server [mongodb:27017] on first connect [MongoError: Authentication failed.]
    at Pool.<anonymous> (/app/node_modules/mongodb-core/lib/topologies/server.js:431:11)
    at Pool.emit (events.js:182:13)
    at Pool.EventEmitter.emit (domain.js:442:20)
    at connect (/app/node_modules/mongodb-core/lib/connection/pool.js:557:14)
   at callback (/app/node_modules/mongodb-core/lib/connection/connect.js:109:5)
    at provider.auth.err (/app/node_modules/mongodb-core/lib/connection/connect.js:352:21)
    at _authenticateSingleConnection (/app/node_modules/mongodb-core/lib/auth/auth_provider.js:66:11)   at sendAuthCommand (/app/node_modules/mongodb-core/lib/auth/scram.js:177:16)
    at Connection.messageHandler (/app/node_modules/mongodb-core/lib/connection/connect.js:334:5)
   at Connection.emit (events.js:182:13)
  at Connection.EventEmitter.emit (domain.js:442:20)
   at processMessage (/app/node_modules/mongodb-core/lib/connection/connection.js:364:10)
   at Socket.<anonymous> (/app/node_modules/mongodb-core/lib/connection/connection.js:533:15)
   at Socket.emit (events.js:182:13)
   at Socket.EventEmitter.emit (domain.js:442:20)
   at addChunk (_stream_readable.js:283:12)
 name: 'MongoNetworkError',
  errorLabels: [ 'TransientTransactionError' ],
  [Symbol(mongoErrorContextSymbol)]: {} }


Подскажите что за ошибка. Без авторизации коннект проходит нормально, как только добавляю юзера и пароль то ошибк
источник

y

yopp in MongoDB Russian
Mishell
То есть во время транзакции документ не доступен для любых других модификаций и транзакций? Я думал что транзакция в контексте монго это просто объединение нескольких изменений в один запрос, который либо выполнится, либо нет. Спасибо
Нет, блокировок нет. Только коммит первой транзакции закончится успехом, остальные транзакции не смогут и получат исключение означающее конфликт.
источник

ГМ

Гена Миквабия in MongoDB Russian
@dd_bb Можешь подсказать пожалуйста
источник

V

Vadim in MongoDB Russian
Добрый день, подскажите пожалуйста, как можно разделить записи по массиву внутри?

Before:
Row = 1, Cities = [1, 2]

After:
Row = 1, Cities = 1
Row = 2, Cities = 2
источник

y

yopp in MongoDB Russian
Гена Миквабия
Коллеги, доброе утро, вопрос такой - документация монги рекомендует использовать файловую систему xfs для WT.
Чем это обусловлено? как я понял, в случае многочисленных параллельных запросов на запись xfs  лучше ext4.
Какие ваши рекомендации будут.
Стоит ли переходить с ext4 на xfs?
источник