MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB $ mod

Trong MongoDB, $mod toán tử đường ống tổng hợp chia một số cho một số khác và trả về phần còn lại.

Để sử dụng $mod , chuyển hai số trong một mảng. $mod toán tử sẽ chia số đầu tiên cho số thứ hai và trả về phần còn lại. Nói cách khác, số đầu tiên là số bị chia và số thứ hai là số bị chia.

Các đối số có thể là bất kỳ biểu thức hợp lệ nào miễn là chúng phân giải thành số.

Ví dụ

Giả sử chúng ta có một tập hợp được gọi là data với các tài liệu sau:

{ "_id" : 1, "a" : 10, "b" : 2 }
{ "_id" : 2, "a" : 10, "b" : 3 }
{ "_id" : 3, "a" : 10.5, "b" : 2 }

Chúng ta có thể sử dụng $mod toán tử trong một đường ống tổng hợp để phân chia a trường của b và trả về phần còn lại:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 1, 2, 3 ] } } },
     { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        result: { $mod: [ "$a", "$b" ] } } 
         }
   ]
)

Kết quả:

{ "a" : 10, "b" : 2, "result" : 0 }
{ "a" : 10, "b" : 3, "result" : 1 }
{ "a" : 10.5, "b" : 2, "result" : 0.5 }

Nói cách khác, chúng ta nhận được a modulo b .

Nếu chúng ta muốn lấy b modulo a , chúng tôi sẽ cần hoán đổi chúng.

Ví dụ:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 1, 2, 3 ] } } },
     { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        result: { $mod: [ "$b", "$a" ] } } 
         }
   ]
)

Kết quả:

{ "a" : 10, "b" : 2, "result" : 2 }
{ "a" : 10, "b" : 3, "result" : 3 }
{ "a" : 10.5, "b" : 2, "result" : 2 }

Số phủ định

Giả sử chúng tôi thêm các tài liệu sau vào bộ sưu tập của mình:

{ "_id" : 4, "a" : -10, "b" : 3 }
{ "_id" : 5, "a" : 10, "b" : -3 }
{ "_id" : 6, "a" : -10, "b" : -3 }

Chúng bao gồm các số âm. Nhưng đó không phải là vấn đề, bởi vì số âm vẫn là số và chúng tôi chắc chắn có thể nhận được mô-đun khi làm việc với số âm.

Ví dụ:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 4, 5, 6 ] } } },
     { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        result: { $mod: [ "$a", "$b" ] } } 
         }
   ]
)

Kết quả:

{ "a" : -10, "b" : 3, "result" : -1 }
{ "a" : 10, "b" : -3, "result" : 1 }
{ "a" : -10, "b" : -3, "result" : -1 }

Loại dữ liệu sai

Các đối số được cung cấp cho $mod có thể là bất kỳ biểu thức hợp lệ nào, miễn là chúng phân giải thành số.

Giả sử chúng ta có tài liệu sau:

{ "_id" : 7, "a" : "Ten", "b" : 2 }

Và chúng tôi áp dụng $mod vào tài liệu đó:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 7 ] } } },
     { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        result: { $mod: [ "$a", "$b" ] } } 
         }
   ]
)

Kết quả:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "$mod only supports numeric types, not string and double",
	"code" : 16611,
	"codeName" : "Location16611"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

Lỗi nói rằng $mod only supports numeric types .

Giá trị rỗng

Cung cấp null đối với bất kỳ đối số nào trả về null .

Giả sử chúng ta có các tài liệu sau:

{ "_id" : 8, "a" : 10, "b" : null }
{ "_id" : 9, "a" : null, "b" : 10 }
{ "_id" : 10, "a" : null, "b" : null }

Và chúng tôi áp dụng $mod đối với các tài liệu đó:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 8, 9, 10 ] } } },
     { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        result: { $mod: [ "$a", "$b" ] } } 
         }
   ]
)

Kết quả:

{ "a" : 10, "b" : null, "result" : null }
{ "a" : null, "b" : 10, "result" : null }
{ "a" : null, "b" : null, "result" : null }

Các trường bị thiếu

Các trường bị thiếu trả về null .

Giả sử chúng ta có các tài liệu sau:

{ "_id" : 11, "a" : 10 }
{ "_id" : 12, "b" : 2 }
{ "_id" : 13 }

Áp dụng $mod :

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 11, 12, 13 ] } } },
     { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        result: { $mod: [ "$a", "$b" ] } } 
         }
   ]
)

Kết quả:

{ "a" : 10, "result" : null }
{ "b" : 2, "result" : null }
{ "result" : null }

Thêm số riêng của bạn

Bạn không nhất thiết chỉ bị giới hạn ở các số trong / s tài liệu. Bạn có thể sử dụng các số của riêng mình nếu bạn cần chia một trường cho một số tiền cố định.

Ví dụ:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 1, 2, 3 ] } } },
     { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        result: { $mod: [ "$a", 5.2 ] } } 
         }
   ]
)

Kết quả:

{ "a" : 10, "b" : 2, "result" : 4.8 }
{ "a" : 10, "b" : 3, "result" : 4.8 }
{ "a" : 10.5, "b" : 2, "result" : 0.09999999999999964 }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. id con trỏ mongodb lỗi không hợp lệ

  2. Trong mongoDb, làm cách nào để xóa một phần tử mảng theo chỉ mục của nó?

  3. NestJS:Cách triển khai xác thực người dùng dựa trên phiên

  4. Dừng mongodb bỏ qua các ký tự đặc biệt?

  5. MongoDB với Mongoid in Rails - Lập chỉ mục không gian địa lý