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

MongoDB $ thêm

Trong MongoDB, $add nhà điều hành đường ống tổng hợp cộng các giá trị với nhau. Các giá trị đó có thể là số hoặc có thể là số và ngày.

$add toán tử chấp nhận các giá trị làm đối số. Các đối số có thể là bất kỳ biểu thức hợp lệ nào miễn là chúng giải quyết thành tất cả các số hoặc thành số và ngày.

Dữ liệu mẫu

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" : 100,
	"b" : 50,
	"c" : ISODate("2021-01-03T23:30:15.100Z")
}
{
	"_id" : 2,
	"a" : 20000,
	"b" : 15,
	"c" : ISODate("2019-12-08T04:00:20.112Z")
}
{
	"_id" : 3,
	"a" : 1700,
	"b" : 3,
	"c" : ISODate("2020-09-24T10:45:01.007Z")
}

Thêm số

Chúng ta có thể sử dụng $add toán tử để thêm ab các lĩnh vực với nhau.

Ví dụ:

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

Kết quả:

{ "a" : 100, "b" : 50, "result" : 150 }
{ "a" : 20000, "b" : 15, "result" : 20015 }
{ "a" : 1700, "b" : 3, "result" : 1703 }

Thêm số với ngày

Nếu một trong các đối số là ngày, các đối số khác được coi là mili giây để thêm vào ngày.

Ví dụ:

db.data.aggregate(
   [
     { $project: { 
       _id: 0,
       a: 1, 
       c: 1, 
       result: { 
         $add: [ "$a", "$c" ] } } 
         }
   ]
).pretty()

Kết quả:

{
	"a" : 100,
	"c" : ISODate("2021-01-03T23:30:15.100Z"),
	"result" : ISODate("2021-01-03T23:30:15.200Z")
}
{
	"a" : 20000,
	"c" : ISODate("2019-12-08T04:00:20.112Z"),
	"result" : ISODate("2019-12-08T04:00:40.112Z")
}
{
	"a" : 1700,
	"c" : ISODate("2020-09-24T10:45:01.007Z"),
	"result" : ISODate("2020-09-24T10:45:02.707Z")
}

Chúng ta có thể thấy rằng các giá trị số trong a trường đã được thêm dưới dạng mili giây vào c trường.

Đối số khác

Các ví dụ trước cộng hai giá trị với nhau, nhưng bạn có thể thêm nhiều giá trị hơn nếu cần.

Dưới đây là một ví dụ về việc thêm cả ba trường với nhau:

db.data.aggregate(
   [
     { $project: { 
       _id: 0,
       a: 1, 
       b: 1,
       c: 1, 
       result: { 
         $add: [ "$a", "$b", "$c" ] } } 
         }
   ]
).pretty()

Kết quả:

{
	"a" : 100,
	"b" : 50,
	"c" : ISODate("2021-01-03T23:30:15.100Z"),
	"result" : ISODate("2021-01-03T23:30:15.250Z")
}
{
	"a" : 20000,
	"b" : 15,
	"c" : ISODate("2019-12-08T04:00:20.112Z"),
	"result" : ISODate("2019-12-08T04:00:40.127Z")
}
{
	"a" : 1700,
	"b" : 3,
	"c" : ISODate("2020-09-24T10:45:01.007Z"),
	"result" : ISODate("2020-09-24T10:45:02.710Z")
}

Lần này, cả hai số đã được thêm vào ngày.

Chỉ được phép một ngày

Mặc dù bạn có thể thêm nhiều biểu thức lại với nhau, nhưng bạn chỉ có thể bao gồm một ngày. Chuyển nhiều ngày dẫn đến lỗi.

Ví dụ:

db.data.aggregate(
   [
     { $project: { 
       _id: 0,
       a: 1, 
       b: 1,
       c: 1, 
       result: { 
         $add: [ "$c", ISODate("2020-09-24T10:45:01.007Z") ] } } 
         }
   ]
).pretty()

Kết quả:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "only one date allowed in an $add expression",
	"code" : 16612,
	"codeName" : "Location16612"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

Không tranh luận

Không chuyển đối số nào cho $add kết quả là 0 được trả lại.

Ví dụ:

db.data.aggregate(
   [
     { $project: { 
       result: { 
         $add: [  ] } } 
         }
   ]
)

Kết quả:

{ "_id" : 1, "result" : 0 }
{ "_id" : 2, "result" : 0 }
{ "_id" : 3, "result" : 0 }

Chuyển giá trị rỗng

Chuyển null kết quả là null .

Ví dụ:

db.data.aggregate(
   [
     { $project: { 
       result: { 
         $add: [ null ] } } 
         }
   ]
)

Kết quả:

{ "_id" : 1, "result" : null }
{ "_id" : 2, "result" : null }
{ "_id" : 3, "result" : null }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tại sao Mongoose có cả lược đồ và mô hình?

  2. Chỉ định nhiều tiêu chí cho các phần tử mảng

  3. Trong MongoDB làm thế nào để trả về chỉ một phần của mảng?

  4. Web Scraping với Scrapy và MongoDB

  5. Làm cách nào để kết hợp nhiều bộ sưu tập thành một bộ sưu tập bằng cách sử dụng $ lookup mongodb hoặc nodejs mongodb?