Nick
думаешь они разложат его? щас попробую
/// <summary>
/// Creates a regular expression filter.
/// </summary>
/// <param name="field">The field.</param>
/// <param name="regex">The regex.</param>
/// <returns>A regular expression filter.</returns>
public FilterDefinition<TDocument> Regex(FieldDefinition<TDocument> field, BsonRegularExpression regex)
{
return new SimpleFilterDefinition<TDocument>(field, regex);
}
Nick
тебе походу BsonRegularExpression надо както состряпать
Maksym
Не оно для лямбды не подойдет
Nick
оно его потом в $regex вроде как преобразует
Nick
а что помешает?
Maksym
не оно там так не работает
Nick
ну чтож, на этом пожалуй остановим погружение в шарп
Maksym
Maksym
короче вот так попробовал но походу хер там
Nick
глаза не режет все в одну строку писать?
Maksym
пока хочу чтоб заработало потом отрефакторю мешать не будет
Vladimir
Всем привет!
Посоветуйте самый правильный способ реализации autoincrement в Mongoose
Nick
Nick
походу раздуплил, тебе нужно использовать вместо Where Matches, он допускает прием регулярки как параметра
Maksym
это гд еты такое нашел?
Maksym
у LINQ вообще нет расширения под названием Matches
Maksym
Matches только у Regex есть
Vladimir
yopp
Vladimir
а зачем?
Для реальной номерации объектов в порядке добавления
yopp
а зачем?
Vladimir
Для того, что бы раздавать порядковые номера, которые могут светиться в доках
yopp
а почему важно иметь именно непрерывную цифровую нумерацию?
Vladimir
Я бы тоже ограничился ObjectId, но это "указ свыше", я предложил от него избавиться, но не сканало) Как это по трушному делается?)
Dmitriy
добавь себе поле int и кидай туда nanotime
yopp
нумерация сквозная?
yopp
или есть какой-то изолированный контекст?
Vladimir
по порядку, до этого по коду считали общее количество записей и приплюсовывали, но с какой-то версии мангуста всё сломалось
Nick
Vladimir
contractId: this.countDocuments({}).then(_ => _ + 1),
Nick
Я было подумал у вас там для чегото эта нумерация используется
yopp
http://henrikingo.github.io/presentations/Highload%202018%20-%20The%20cost%20of%20MongoDB%20ACID%20transactions%20in%20theory%20and%20practice/index.html
yopp
yopp
тогда делайте поле для номера, по нему уникальный индекс и перед вставкой берите последний номер и к нему приплюсовывайте
yopp
в 4 заверните в транзакцию
yopp
в 3 retry на ошибке
yopp
количество документов — нельзя использовать
yopp
это ужасная метрика
yopp
её ужас в том, что документов может становиться резко больше или меньше. если мне память не изменяет, count/size вообще не факт что актуальное число показывает
Vladimir
спасибо, перепилил
Vladimir
this.findOne().sort('-contractId').then(_ => _.contractId + 1)
А это можно как-то опимизировать?
yopp
Индекс по contractId с обратным порядком (-1)
yopp
Уникальный индекс
Vladimir
эмм, не понял)
yopp
https://docs.mongodb.com/manual/indexes/#single-field
yopp
unique: true, contractId: -1
yopp
и сравнить что быстрее find({$max: {contractId: MaxKey}}).limit(1) или find({}).sort({contractId: -1}).limit(1)
yopp
но я про $max не уверен, там планировщик без $min может выбрать менее удачную стратегию
Maksym
{ "KeyWords" : { "$elemMatch" : { "" : /Hal/i } } }
Maksym
подскажите плз почему такой match может не работать?
Maksym
KeyWords коллекция стрингов
Nick
а оно не ломает парсер запроса?
Maksym
запрос отрабатывает, просто ничего не выбирает
Nick
Nick
или это начало?
Maksym
есть
Maksym
но насколько я понимаю /Hal/i это любое вхождение IgnoreCase
AstraSerg
Petro
Вопрос, можно ли реализовать autocomplete в монго, т.е. в идеале я нахожу с помощью $regex докумениты, но мне нужно их посортировать относительно % вхождение. ($text, $meta: ‘textScore’ насколько я смотрел работаю с целыми словами, а мне нужно даже если 1-2 буквы, части слова буду вводить)
Nick
Nick
точнее его нужно вручную реализовывать
Nick
а мне нужно даже если 1-2 буквы, части слова буду вводить
Nick
так что не это
Миша
Кому-нибудь когда-нибудь приходилось конкатить массивы из разных документов при агрегации?
Nick
Миша
Например, после $group у меня в агрегации есть два документа в каждом по массиву, мне надо заканкатить второй к первому и продолжить агрегацию с $unwind
Nick
Anonymous
Hi all!
Anonymous
Настриваю монго, функция хэша выдает ошибку, не знаю как решить. const crypto = require('crypto');
const mongoose = require('../libs/mongoose');
const { Schema } = mongoose;
const schema = new Schema({
username: {
type: String,
unique: true,
required: true,
},
hashedPassword: {
type: String,
required: true,
},
salt: {
type: String,
required: true,
},
created: {
type: Date,
default: Date.now,
},
});
schema.methods.encryptPassword = function (password) {
crypto.createHmac('sha1', this.salt)
.update(password)
.digest('hex');
};
schema.virtual('password')
.set((password) => {
this.plainPassword = password;
this.salt = ${Math.random()};
this.hashedPassword = this.encryptPassword(password);
})
.get(() => this.plainPassword);
schema.methods.checkPassword = password => this.encryptPassword(password) === this.hashedPassword;
exports.User = mongoose.model('User', schema);
Anonymous
Ошибка TypeError: this.encryptPassword is not a function
倫太郎
倫太郎
читай внимательно
Anonymous
Миша
типа
{
id:1,
ar:[{},{},{}]
}
{
id:2,
ar:[{},{},{}]
}
и что из них надо поулчить?
[{ from: 1 }, { from: 1 }, { from: 1 }, { from: 2 }, { from: 2 }, { from: 2 }]
Nick
{ $unwind: "$arr" },
{ $group: {
_id: 1,
arr: {$push: "$arr"}
}}
Al
Всем привет!
Чекните запрос плиз
const folderIds = req.body.folderIds
const folderId = req.body.folderId
const user = req.user
const result = await Folder.update({
_id: { $in: folderIds },
parent: folderId,
user: user._id
},
{ $set: { deletedAt: Date.now() } },
{ multi: true }
)
Al
Он должен ставить статус удален документам входящим в массив id'ников и удовлетворяющим условиям по user и parent.
Сделано как алтернатива циклу с update каждый документ. Все тут норм?