В MongoDB, $divide
Операторът на конвейера за агрегиране дели едно число на друго и връща резултата.
За да използвате $divide
, предава числата в масив. $divide
операторът ще раздели първото число на второто число. С други думи, първото число е делимото, а второто число е делителят.
Аргументите могат да бъдат всеки валиден израз, стига да се разделят на числа.
Пример
Да предположим, че имаме колекция, наречена data
със следния документ:
{ "_id" : 1, "a" : 1000, "b" : 2 }
Можем да използваме $divide
оператор в рамките на конвейер за агрегиране, за да раздели едно от тези числа на другото.
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
result: { $divide: [ "$a", "$b" ] } }
}
]
)
Резултат:
{ "a" : 1000, "b" : 2, "result" : 500 }
Ако искаме да разделим b
поле от a
поле, ще трябва да ги разменим.
Пример:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
result: { $divide: [ "$b", "$a" ] } }
}
]
)
Резултат:
{ "a" : 1000, "b" : 2, "result" : 0.002 }
Отрицателни числа
Да предположим, че добавяме следния документ към нашата колекция:
{ "_id" : 2, "a" : 1000, "b" : -2 }
Това включва отрицателно число. Но това не е проблем, защото отрицателното число все още е число и със сигурност можем да разделим всяко число на отрицателно число.
Пример:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
result: { $divide: [ "$a", "$b" ] } }
}
]
)
Резултат:
{ "a" : 1000, "b" : 2, "result" : 500 } { "a" : 1000, "b" : -2, "result" : -500 }
Тук се превключва, така че да разделим отрицателно число на положително число:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
result: { $divide: [ "$b", "$a" ] } }
}
]
)
Резултат:
{ "a" : 1000, "b" : 2, "result" : 0.002 } { "a" : 1000, "b" : -2, "result" : -0.002 }
Добавете свой собствен номер
Не е задължително да сте ограничени само до числата в документа/ите. Можете да използвате свои собствени числа, ако трябва да разделите поле на фиксирана сума.
Пример:
db.data.aggregate(
[
{ $project: {
_id: 0,
result: { $multiply: [ "$a", 5 ] } }
}
]
)
Резултат:
{ "result" : 5000 } { "result" : 5000 }