Максимальная продолжительность текстового представления адреса IPv6?

Интересная проблема. Я не знаю, можете ли вы сделать это в одном запросе, но вы можете сделать это двумя:

var x = 1; // given integer
closestBelow = db.test.find({ratio: {$lte: x}}).sort({ratio: -1}).limit(1);
closestAbove = db.test.find({ratio: {$gt: x}}).sort({ratio: 1}).limit(1);

Затем вы просто проверяете, какой из двух документов имеет ratio, ближайший к

MongoDB 3.2 Update

В выпуске 3.2 добавлена ​​поддержка оператора агрегации абсолютного значения $abs , который теперь позволяет сделать это в одиночный aggregate запрос:

var x = 1;
db.test.aggregate([
    // Project a diff field that's the absolute difference along with the original doc.
    {$project: {diff: {$abs: {$subtract: [x, '$ratio']}}, doc: '$$ROOT'}},
    // Order the docs by diff
    {$sort: {diff: 1}},
    // Take the first one
    {$limit: 1}
])

413
задан Mark Amery 11 April 2017 в 21:14
поделиться

2 ответа

45 символов .

Вы могли бы ожидать, что адрес будет

0000:0000:0000:0000:0000:0000:0000:0000

8 * 4 + 7 = 39

8 групп из 4 цифр с 7 : между ними.

, Но если Вы имеете отображенный на IPv4 адрес IPv6 , последние две группы могут быть записаны в основе 10 разделенных ., например, [::ffff:192.168.100.228]. Выписанный полностью:

0000:0000:0000:0000:0000:ffff:192.168.100.228

(6 * 4 + 5) + 1 + (4 * 3 + 3) = 29 + 1 + 15 = 45

Примечание, это - соглашение входа/дисплея - это - все еще адрес на 128 битов, и для устройства хранения данных, вероятно, было бы лучше стандартизировать на разделенном формате необработанного двоеточия, т.е. [0000:0000:0000:0000:0000:ffff:c0a8:64e4] для адреса выше.

571
ответ дан kasperd 11 April 2017 в 21:14
поделиться

Отвеченный мой собственный вопрос:

адреса IPv6 обычно пишутся как восемь групп из четырех шестнадцатеричных цифр, где каждая группа разделяется двоеточием (:).

, Таким образом, это - 39 символов [максимум 113]

15
ответ дан Gilles 11 April 2017 в 21:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: