
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
а на остальные он забивает
и вот я не могу понять в чем мой прокол

Yurii
30.05.2018
11:02:31

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

Yurii
30.05.2018
11:05:20
ниже, она не умеет orders.$[].state

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

Yurii
30.05.2018
11:06:48

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
все, нашел, спасибо

Игорь
30.05.2018
21:47:52

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, то его нет.
Куда копать? )


Nikita
31.05.2018
09:36:53
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, то его нет.
Куда копать? )
а если сделать так:
Location: {
coordinates: {
type: [Number], // [<longitude>, <latitude>]
index: '2dsphere'
}
}
?


Alexander
31.05.2018
09:37:13
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.

Alexander
01.06.2018
09:48:10

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.

Alexander
01.06.2018
12:41:35

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
да