@MongoDBRussian

Страница 252 из 342
agic
29.05.2018
14:07:32
в чем разница ? судя по доке ns легче, а по факту никакой разницы вообще

Nick
29.05.2018
14:08:40
это уже какието тонкости языка/драйвера

agic
29.05.2018
14:10:01
ну это понятно

я же писал выше на питоне нагрузка меньше...

Google
Nick
29.05.2018
14:10:46
скорее всего ns занимается обычным резолвом нйемспейса, т.е. берт само бд, потом ищет коллеккцию там. во втором случае вы самостоятельно берете конкретную бд и там уже конкретную коллекцию. эти методы не могу отличаться, разве что только доп строчкой кода

yopp
29.05.2018
14:50:51
Не никакого «резолва». В команде протокола просто есть поле ns, которое по соглашению состоит из строки с точкой, где левая часть имя базы, правая часть имя коллекции.

https://docs.mongodb.com/manual/reference/mongodb-wire-protocol/

Vlad
30.05.2018
06:37:13
Привет всем, можете сказать какими веб-мордами пользуетесь для монги? Есть аналоги pma?

Пользователи слишком привыкли к гуям.

Artem
30.05.2018
06:40:46
эм. а пользователи напрямки в БД лезут?

Vlad
30.05.2018
06:44:56
Да, часть имеют прямой доступ к отдельным инсталяциям

Viktor
30.05.2018
08:01:28
доброго времени суток, а можно ли сейчас в монге сделать case-insensetive поиск и сортировку по строкам без доп. поля? читаю https://docs.mongodb.com/manual/reference/collation/, но не нравится, что нужно обязательно collation указывать, есть какие-то еще варианты или можно как-нибудь указывать дефолтный collation для запросов?

@dd_bb есть бестпрактисы какие-нибудь? ^

Anton
30.05.2018
10:08:22
Привет всем, такой вопрос, хочу обновить одну строку у большого количества документов на основании массив айдишников($in) { status: 'cancelled', orderIds: [ '20180529822092398', '201805292068719183', '20180529920032257' ] } Выглядят входные данные примерно так



return mongo.loadConnection().then((db) => { return db.collection('AccountsOrders').update({ 'orders.id': {$in: data.orderIds}, }, {$set: {'orders.$.state': data.status}}, {multi: true}); }); Обновляю я вот так, но проблема в том, что статус проставляется только для первого объекта из массива ордеров

Google
Anton
30.05.2018
10:09:41
а на остальные он забивает

и вот я не могу понять в чем мой прокол

Bandikoot
30.05.2018
11:04:33
а на остальные он забивает
насколько помню, нужно в match-части также указывать массив, чтобы positional operator в $set блоке по нему работал

Bandikoot
30.05.2018
11:05:57
я сталкивался с подобным на 3.4

Yurii
30.05.2018
11:06:48
я сталкивался с подобным на 3.4
https://docs.mongodb.com/manual/reference/operator/update/positional-all/ New in version 3.6.

Anton
30.05.2018
11:35:12
ну а что если монга ниже?)

Yurii
30.05.2018
11:35:42
ну а что если монга ниже?)
то надо вручную ?

ну а что если монга ниже?)
может @dd_bb что-то подскажет, но я делал выгрузку с базы по критерию, вручную проходился по массиву. менял документ и делал update каждого документа

Anton
30.05.2018
11:54:26
я вот не могу найти как обновиться до 3.6

Max
30.05.2018
11:57:52
Anton
30.05.2018
12:01:38
а хотя нет, с монгой все норм, 3.6.2 Тогда яне могу понять почему $[] не работае

Oleg
30.05.2018
21:20:03
ребят, как избавиться в шарповом драйвере от записи дискриминатора типа мы и так четко знаем какой там тип, нет никакого полиморфизма просто лишнее поле болтается с названием _t

все, нашел, спасибо

Oleg
30.05.2018
21:48:08
Игорь
30.05.2018
21:48:41
как избавится в шарповом драйвере

Oleg
30.05.2018
21:48:56
при его использовании

Google
Игорь
30.05.2018
21:49:27
O_O ничего себе

а если не использовать, наверно и... ничего бы не спрашивалось

Oleg
30.05.2018
21:50:23
можно код вообще не писать, тогда проблем не будет

Игорь
30.05.2018
21:51:12
зачем вам монга в C#?

Oleg
30.05.2018
21:53:05
потому что у нас полное дотнет окружение, но в наследство досталась монга

Игорь
30.05.2018
21:53:30
и вы полноценно не смогли его мигрировать!

все ясно

Oleg
30.05.2018
21:54:33
так чтоб мигрировать надо четко понимать куда и сколько это будет стоить

а работать должно вчера

потому дружим с монгой

я не жалуюсь

Alexander
31.05.2018
09:35:12
import mongoose from 'mongoose'; const schema = new mongoose.Schema({ Identification: String, Location: { coordinates: [Number], type: { type: String } }, PostalAddress: { AddressLine: [String], BuildingNumber: String, StreetName: String, TownName: String, CountrySubDivision: [String], Country: String, PostCode: String, }, }); schema.index({ Location: '2dsphere' }); export default mongoose.model('Atm', schema); Добавляю в коллекцию через .findOneAndUpdate(...{usert: true, new: true) Если индекс создаю как Location.coordinates, то все ок, но это не верно. А если индекс просто по Location, то его нет. Куда копать? )

Alexander
31.05.2018
09:37:13
а если сделать так: Location: { coordinates: { type: [Number], // [<longitude>, <latitude>] index: '2dsphere' } } ?
да, индекс есть. а как теперь запрос сделать на $near c лимитом на 10 ближайших? чот-т гугл блочит мои запросы )))

db.atms.find({ 'Location.coordinates' : { $near: [51.5411, -2.41327], $maxDistance: 0.10 } }) Error: error: { "ok" : 0, "errmsg" : "error processing query: ns=barclays.atmsTree: GEONEAR field=Location.coordinates maxdist=0.1 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query", "code" : 2, "codeName" : "BadValue" }

Nikita
31.05.2018
09:44:31
Может не надо указывать .coordinates?

Alexander
31.05.2018
09:45:23
Nick
31.05.2018
09:50:44
а что мешает взять дефолтную схему для гео? var UserSchema = new Schema({ location: { 'type': {type: String, enum: "Point", default: "Point"}, coordinates: { type: [Number], default: [0,0]} }, }); UserSchema.index({location: '2dsphere'});

и вставлять объекты с location: { type: "Point", coordinates: [ -73.9928, 40.7193 ] }, как это указано в доке монги

Google
Alexander
31.05.2018
09:53:58
просто запрос надо было не $near делать, а nearSphere

но вопрос, как найти 10 ближайших точек остался актуальным ))

limit поможет?

Nikita
31.05.2018
09:55:16
ага

он же итак их отсортирует вроде

Alexander
31.05.2018
09:55:44
точно?

Nikita
31.05.2018
09:56:10
У меня с $geoNear запросом выдаёт 20 ближайших

Nick
31.05.2018
09:56:43
$near Returns geospatial objects in proximity to a point. Requires a geospatial index. The 2dsphere and 2d indexes support $near. $nearSphere Returns geospatial objects in proximity to a point on a sphere. Requires a geospatial index. The 2dsphere and 2d indexes support $nearSphere. странно что нужно было на nearSphere переходить

Nikita
31.05.2018
09:56:57
$geoNear: { near: { type: 'Point', coordinates }, maxDistance: 5000, distanceField: 'distance', spherical: true }

Alexander
31.05.2018
10:36:30
Хрень какая-то. В консоли монги всё работает: db.atms.find({ 'Location.coordinates': { $geoNear: { $geometry: { type: "Point", coordinates: [-2.41327,51.5411 ] } } } }).limit(2) В модели монгуса нифига не работает const points = Atm.find({ 'Location.coordinates': { $geoNear: { $geometry: { type: 'Point', coordinates: [-2.41327,51.5411 ]} } } }) .limit(10) .then(results => results); Выдает: Error: Can't use $geoNear with Array.

Парни, а можете прояснить значение полей distanceMultiplier и maxDistance? в чем они измеряются? $geoNear: { near: { type: 'Point', coordinates: [ -2.41327, 51.5411 ] }, distanceField: 'dist.distance', // distanceMultiplier: 3959, // maxDistance: 50000 / 3959, // query: { type: 'public' }, num: 10, spherical: true }

yopp
01.06.2018
09:47:36
> The measuring units for the maximum distance are determined by the coordinate system in use. For GeoJSON point object, specify the distance in meters, not radians.

yopp
01.06.2018
12:38:15
Дорогой чятик, в воскресенье, 3 июня, с 19:00 до 22:00 (Мск) Артём @SvPupok делает тестовый стрим. Будем говорить о репликации и шардировании. public poll Да, хочу смотреть – 45 ??????? 92% Нет, мне неинтересно – 2 ▫️ 4% Нет, мне неудобно – 2 ▫️ 4% ? 49 people voted so far.

yopp
01.06.2018
12:44:01
Чуть позже закинем ивент на TimePad, оттуда будет рассылка с напоминанием

Alexander
01.06.2018
12:46:38
Прямо в телеграм?

yopp
01.06.2018
12:47:15
Нет, на почту. Но мы придумаем как тут всех оповестить :)

Google
Maksim
01.06.2018
13:00:48
Добрый день. Подскажите пожалуйста, возможно ли в монгу сделать запрос вида. Имеется 2 даты, начальная и конечная, так же некое число. С запросом понятно дело разобрался как по датам начальной и конечной выдернуть данные. Но вот дальше сложнее, Нужно вынуть 2 значения timestamp и clear_timestamp, и посчитать их разницу переведя в секунды, сравнив в числом которе было предоставлено; если оно больше или равно этому числу, то вывести результат, если нет, то не выводить

сообразил что-то вроде такого для начала

db.tg.aggregate([{ $match: {"timestamp": {"$gte": ISODate("2018-05-31T00:00:004Z"),"$lt": ISODate("2018-06-02T00:00:004Z")}}}, { $project: { _id : 0, r1: {$subtract:["timestamp", 5 * 60 * 1000 ]} }},])

yopp
01.06.2018
13:05:07
Если я правильно помню, то простые математические операции над датами дают числовой результат.

В секундах, в вымысле. Так что вы в правильном направлении двигаетесь

Maksim
01.06.2018
13:06:00
образно мне надо исключить данные у которых duration меньше допустим 5 минут

но с агрегацией в монге я не силен. побороть пока что не удалось

yopp
01.06.2018
13:08:56
Да. Вы выбираете сначала события по какой-то дате, а дальше вам надо сделать даже не project, а addField, добавив поле duration, где вы по вашему алгоритму вычисляете длительность и дальше опять match

Maksim
01.06.2018
13:09:01
вышенаписанное. это смесь гугл поиска и попытке разобраться

yopp
01.06.2018
13:09:15
Хотя мне кажется что даже обычный query можно сделать

Maksim
01.06.2018
13:09:37
ну duration надо посчитать получается

yopp
01.06.2018
13:11:15
У вас он как считается? Просто разница между датами двух полей?

Maksim
01.06.2018
13:11:30
да

Страница 252 из 342