Mảng nhóm mongodb của các đối tượng
Để truy xuất nhóm theo kết quả với mảng, hãy sử dụng hàm tổng hợp(). Chúng tôi cũng sẽ sử dụng toán tử $addToSet. Nó thêm một giá trị vào một mảng trừ khi giá trị đó đã có sẵn, trong trường hợp đó $addToSet không làm gì với mảng đó Show Hãy để chúng tôi tạo một bộ sưu tập với các tài liệu - > db.demo498.insertOne({id:1,Name:["Chris"]});{ "acknowledged" : true, "insertedId" : ObjectId("5e86192b987b6e0e9d18f553") } > db.demo498.insertOne({id:2,Name:["David"]});{ "acknowledged" : true, "insertedId" : ObjectId("5e86192d987b6e0e9d18f554") } > db.demo498.insertOne({id:3,Name:["Chris"]});{ "acknowledged" : true, "insertedId" : ObjectId("5e861931987b6e0e9d18f555") } > db.demo498.insertOne({id:4,Name:["Bob"]});{ "acknowledged" : true, "insertedId" : ObjectId("5e861942987b6e0e9d18f556") } > db.demo498.insertOne({id:5,Name:["David"]});{ "acknowledged" : true, "insertedId" : ObjectId("5e861947987b6e0e9d18f557") } Hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find() - > db.demo498.find(); Điều này sẽ tạo ra đầu ra sau - { "_id" : ObjectId("5e86192b987b6e0e9d18f553"), "id" : 1, "Name" : [ "Chris" ] } { "_id" : ObjectId("5e86192d987b6e0e9d18f554"), "id" : 2, "Name" : [ "David" ] } { "_id" : ObjectId("5e861931987b6e0e9d18f555"), "id" : 3, "Name" : [ "Chris" ] } { "_id" : ObjectId("5e861942987b6e0e9d18f556"), "id" : 4, "Name" : [ "Bob" ] } { "_id" : ObjectId("5e861947987b6e0e9d18f557"), "id" : 5, "Name" : [ "David" ] } Sau đây là truy vấn để truy xuất nhóm theo kết quả với mảng trong MongoDB - > db.demo498.aggregate([{ .. $unwind : "$Name" .. }, { .. $group : { .. _id : $quot;$Name", .. Id : { .. $addToSet : "$id" .. } .. } .. } .. ]) Điều này sẽ tạo ra đầu ra sau - { "_id" : "David", "Id" : [ 5, 2 ] } { "_id" : "Bob", "Id" : [ 4 ] } { "_id" : "Chris", "Id" : [ 3, 1 ] } Về cơ bản, điều tôi muốn là truy xuất dữ liệu sao cho mảng con dấu trang có mảng con chứa dấu trang với quốc gia cụ thể Vì vậy, thay vì
nó sẽ là
trong khi vẫn giữ thông tin người dùng như tên, nhà cung cấp, v.v. Hiện tại, đường ống của tôi trông như thế này
phân tách mục nào trong mảng con nhưng tôi không chắc làm cách nào để đặt chúng trở lại theo cách tôi muốn chúng trông Tôi chưa quen với mongodb và có thể tôi đang thiếu thứ gì đó. Nhưng có rất nhiều mẫu trên internet, vẫn gặp sự cố khi lấy tổng trên một trường là một phần của mảng đối tượng. Đây là những gì tôi đang làm ________số 8cố gắng để có được tổng số tiền theo những cách khác nhau
lấy số dư 0 thay vì -2300 > db.demo498.find();0 những điều tương tự với $unwind > db.demo498.find();1 những gì tôi đang làm sai? Cảm ơn Nếu đối số không phân giải thành một mảng hoặc > db.demo498.find();21 cũng như không đề cập đến một trường bị thiếu, thì sẽ trả về lỗi
sự biểu lộ Bộ
sự biểu lộ Giá trị mà Trong quá trình đánh giá biểu thức > db.demo498.find();28, sẽ có hai biến
Nếu > db.demo498.find();20 phân giải thành một mảng trống, trả về > db.demo498.find();26 Ví dụ Kết quả
ví dụPhép nhânxác suấtMột bộ sưu tập có tên { "_id" : ObjectId("5e86192b987b6e0e9d18f553"), "id" : 1, "Name" : [ "Chris" ] } { "_id" : ObjectId("5e86192d987b6e0e9d18f554"), "id" : 2, "Name" : [ "David" ] } { "_id" : ObjectId("5e861931987b6e0e9d18f555"), "id" : 3, "Name" : [ "Chris" ] } { "_id" : ObjectId("5e861942987b6e0e9d18f556"), "id" : 4, "Name" : [ "Bob" ] } { "_id" : ObjectId("5e861947987b6e0e9d18f557"), "id" : 5, "Name" : [ "David" ] }74 chứa các sự kiện của một thí nghiệm xác suất. Mỗi thử nghiệm có thể có nhiều { "_id" : ObjectId("5e86192b987b6e0e9d18f553"), "id" : 1, "Name" : [ "Chris" ] } { "_id" : ObjectId("5e86192d987b6e0e9d18f554"), "id" : 2, "Name" : [ "David" ] } { "_id" : ObjectId("5e861931987b6e0e9d18f555"), "id" : 3, "Name" : [ "Chris" ] } { "_id" : ObjectId("5e861942987b6e0e9d18f556"), "id" : 4, "Name" : [ "Bob" ] } { "_id" : ObjectId("5e861947987b6e0e9d18f557"), "id" : 5, "Name" : [ "David" ] }74, chẳng hạn như tung xúc xắc nhiều lần hoặc rút nhiều thẻ (không thay thế) liên tiếp để đạt được kết quả mong muốn. Để có được xác suất tổng thể của thí nghiệm, chúng ta sẽ cần nhân xác suất của từng sự kiện trong thí nghiệm { "_id" : ObjectId("5e86192b987b6e0e9d18f553"), "id" : 1, "Name" : [ "Chris" ] } { "_id" : ObjectId("5e86192d987b6e0e9d18f554"), "id" : 2, "Name" : [ "David" ] } { "_id" : ObjectId("5e861931987b6e0e9d18f555"), "id" : 3, "Name" : [ "Chris" ] } { "_id" : ObjectId("5e861942987b6e0e9d18f556"), "id" : 4, "Name" : [ "Bob" ] } { "_id" : ObjectId("5e861947987b6e0e9d18f557"), "id" : 5, "Name" : [ "David" ] }7 bước
> db.demo498.aggregate([{ .. $unwind : "$Name" .. }, { .. $group : { .. _id : $quot;$Name", .. Id : { .. $addToSet : "$id" .. } .. } .. } .. ])9 Hoạt động trả về như sau { "_id" : "David", "Id" : [ 5, 2 ] } { "_id" : "Bob", "Id" : [ 4 ] } { "_id" : "Chris", "Id" : [ 3, 1 ] }2 hàng giảm giáMột bộ sưu tập có tên > db.demo498.aggregate([{ .. $unwind : "$Name" .. }, { .. $group : { .. _id : $quot;$Name", .. Id : { .. $addToSet : "$id" .. } .. } .. } .. ])92 chứa các tài liệu sau { "_id" : "David", "Id" : [ 5, 2 ] } { "_id" : "Bob", "Id" : [ 4 ] } { "_id" : "Chris", "Id" : [ 3, 1 ] }4 Mỗi tài liệu chứa một mảng > db.demo498.aggregate([{ .. $unwind : "$Name" .. }, { .. $group : { .. _id : $quot;$Name", .. Id : { .. $addToSet : "$id" .. } .. } .. } .. ])93 chứa các phiếu giảm giá theo phần trăm hiện có cho mỗi mặt hàng. Nếu mỗi lần giảm giá có thể được áp dụng cho sản phẩm một lần, chúng ta có thể tính giá thấp nhất bằng cách sử dụng > db.demo498.find();88 để áp dụng công thức sau cho mỗi phần tử trong mảng > db.demo498.aggregate([{ .. $unwind : "$Name" .. }, { .. $group : { .. _id : $quot;$Name", .. Id : { .. $addToSet : "$id" .. } .. } .. } .. ])93. (1 - giảm giá) * giá { "_id" : "David", "Id" : [ 5, 2 ] } { "_id" : "Bob", "Id" : [ 4 ] } { "_id" : "Chris", "Id" : [ 3, 1 ] }8 Hoạt động trả về như sau { "_id" : "David", "Id" : [ 5, 2 ] } { "_id" : "Bob", "Id" : [ 4 ] } { "_id" : "Chris", "Id" : [ 3, 1 ] }9 nối chuỗiMột bộ sưu tập có tên > db.demo498.aggregate([{ .. $unwind : "$Name" .. }, { .. $group : { .. _id : $quot;$Name", .. Id : { .. $addToSet : "$id" .. } .. } .. } .. ])96 chứa các tài liệu sau > db.demo498.find();80 Ví dụ sau rút gọn mảng chuỗi > db.demo498.aggregate([{ .. $unwind : "$Name" .. }, { .. $group : { .. _id : $quot;$Name", .. Id : { .. $addToSet : "$id" .. } .. } .. } .. ])97 thành một chuỗi duy nhất > db.demo498.aggregate([{ .. $unwind : "$Name" .. }, { .. $group : { .. _id : $quot;$Name", .. Id : { .. $addToSet : "$id" .. } .. } .. } .. ])98 > db.demo498.find();81 Hoạt động trả về như sau > db.demo498.find();82 nối mảngMột bộ sưu tập có tên > db.demo498.aggregate([{ .. $unwind : "$Name" .. }, { .. $group : { .. _id : $quot;$Name", .. Id : { .. $addToSet : "$id" .. } .. } .. } .. ])99 chứa các tài liệu sau > db.demo498.find();83 Tính toán một lần giảmVí dụ sau thu gọn mảng hai chiều thành một mảng duy nhất { "_id" : "David", "Id" : [ 5, 2 ] } { "_id" : "Bob", "Id" : [ 4 ] } { "_id" : "Chris", "Id" : [ 3, 1 ] }20 > db.demo498.find();84 Hoạt động trả về như sau > db.demo498.find();85 Tính toán nhiều lần giảmVí dụ sau thực hiện thu gọn mảng hai chiều giống như ví dụ trên, nhưng cũng tạo một mảng mới chỉ chứa phần tử đầu tiên của mỗi mảng Làm cách nào để nhóm mảng đối tượng theo khóa trong MongoDB?Nhóm và đẩy các đối tượng trong mảng nếu chúng có cùng khóa trong tài liệu mongodb . $unwind giải cấu trúc mảng appInfos $group theo tài nguyên và app_key và xây dựng mảng siêu dữ liệu một lần nữa $group chỉ bằng tài nguyên và xây dựng lại mảng appInfos mà chúng tôi đã giải cấu trúc trong giai đoạn đầu tiên Làm cách nào để nhóm giá trị mảng trong MongoDB?Để truy xuất nhóm theo kết quả bằng mảng, sử dụng hàm tổng hợp() . Chúng tôi cũng sẽ sử dụng toán tử $addToSet. Nó thêm một giá trị vào một mảng trừ khi giá trị đó đã có sẵn, trong trường hợp đó $addToSet không làm gì với mảng đó. > db.
Làm cách nào để đẩy đối tượng vào mảng trong MongoDB?Trong MongoDB, toán tử $push được sử dụng để nối một giá trị đã chỉ định vào một mảng . Nếu trường được đề cập không có trong tài liệu để cập nhật, toán tử $push sẽ thêm trường đó dưới dạng trường mới và bao gồm giá trị được đề cập làm thành phần của nó. Nếu trường cập nhật không phải là trường kiểu mảng thì thao tác không thành công.
Đối tượng tích lũy trong MongoDB là gì?Bộ tích lũy là toán tử duy trì trạng thái của chúng (e. g. tổng, giá trị lớn nhất, giá trị nhỏ nhất và dữ liệu liên quan) khi tài liệu tiến triển trong quy trình . Sử dụng toán tử $accumulator để thực thi các hàm JavaScript của riêng bạn nhằm triển khai hành vi không được Ngôn ngữ truy vấn MongoDB hỗ trợ. |