Số lần xuất hiện mongodb trong mảng
Mỗi hoạt động có một mảng được gọi là các phần và mỗi phần tử của mảng đó có một thể hiện và một Loại thành phần Tôi muốn có thể đếm tất cả các hoạt động trong đó một trong các thành phần trong mảng phần có loại thành phần là "Trường hợp nhúng" và một thể hiện bằng objectId mà tôi sẽ chỉ định Địa chỉ email ẩn danh cho nhóm này hoặc bạn cần có quyền xem địa chỉ email thành viên để xem thư gốc để mongod. @nhóm Google. com Nếu tôi có một loạt tài liệu trong đó mỗi tài liệu có id danh mục, tôi có thể lấy tài liệu cho mỗi danh mục với db. các tài liệu. tổng hợp([{$project. {Thể loại ID. 1, _id. 0}}, {$nhóm. {_Tôi. "$category_id", bài đăng. { $sum. 1 }}}]); Có cách nào để lấy số lượng danh mục duy nhất mà không cần lấy toàn bộ bộ trả về và đếm số lượng tài liệu (và điều đó thậm chí có thể thực hiện được với vỏ mongo) không? Làm cách nào để tôi cấu trúc truy vấn MongooseJS/MongoDB của mình để nhận tổng số lần trùng lặp/lần xuất hiện của một giá trị trường cụ thể? . Tổng số tài liệu có Tôi có thể làm điều này bằng tay trong dòng lệnh
đầu ra. 1 > db.demo184.find();0 đầu ra. 4 Tôi tìm thấy tài nguyên này Cách tính tổng các giá trị riêng biệt của một trường trong bộ sưu tập MongoDB (sử dụng cầy mangut) Nhưng nó yêu cầu tôi chỉ định các trường duy nhất mà tôi muốn tính tổng Trong trường hợp này, tôi muốn lặp qua tất cả các tài liệu, tính tổng số lần xuất hiện của từng tài liệu - stackoverflow. comghi bàn. 9 câu trả lời được chấp nhận Tất cả những gì bạn cần làm là tài liệu của bạn trước ngày _______ 7 và sử dụng toán tử tích lũy để trả về "số lượng" cho mỗi nhóm Để đếm, bạn cũng có thể sử dụng tính năng tổng hợp () cùng với $sum. Hãy để chúng tôi tạo một bộ sưu tập với các tài liệu - > db.demo184.insertOne({"Names":["Chris","David","Bob"]}); { "acknowledged" : true, "insertedId" : ObjectId("5e3999fb9e4f06af55199805") } > db.demo184.insertOne({"Names":["Chris","Mike"]}); { "acknowledged" : true, "insertedId" : ObjectId("5e399a0d9e4f06af55199806") } > db.demo184.insertOne({"Names":["Chris","Bob","Carol"]}); { "acknowledged" : true, "insertedId" : ObjectId("5e399a209e4f06af55199807") } 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.demo184.find(); Điều này sẽ tạo ra đầu ra sau - { "_id" : ObjectId("5e3999fb9e4f06af55199805"), "Names" : [ "Chris", "David", "Bob" ] } { "_id" : ObjectId("5e399a0d9e4f06af55199806"), "Names" : [ "Chris", "Mike" ] } { "_id" : ObjectId("5e399a209e4f06af55199807"), "Names" : [ "Chris", "Bob", "Carol" ] } Sau đây là truy vấn để đếm tần suất của mọi phần tử - > db.demo184.aggregate([ .. { "$unwind" : "$Names" }, .. { "$group": { "_id": "$Names", "count": { "$sum": 1} } }, .. { "$group": { .. "_id": null, .. "counts": { .. "$push": { .. "k": "$_id", .. "v": "$count" .. } .. } .. } }, .. { "$replaceRoot": { .. "newRoot": { "$arrayToObject": "$counts" } .. } } ...]) Điều này sẽ tạo ra đầu ra sau - { "Carol" : 1, "David" : 1, "Chris" : 3, "Bob" : 2, "Mike" : 1 } Tôi cần trợ giúp trong việc đếm số lần xuất hiện chuỗi bên trong một mảng và chiếu chúng bên trong tập hợp dữ liệu của tôi Việc tổng hợp có một vài bước tổng hợp nhưng sau giai đoạn > db.demo184.find();2 cuối cùng, các tài liệu trông như thế này
Và điều tôi muốn là đếm số lần xuất hiện của các mục bên trong > db.demo184.find();3 và > db.demo184.find();4 và chiếu trường này thành một trường mới. Vì vậy, đầu ra sẽ trông như thế này
Tôi thực sự không biết làm thế nào tôi có thể làm điều này trong quá trình tổng hợp. Thật dễ dàng để đạt được điều này trong nút với mảng được trả về từ tập hợp, nhưng tôi thích làm điều này bên trong truy vấn hơn. Bất kỳ đầu vào? |