如何计算节点js中mongodb模式中的数组对象?
how to count an array object in a mongdb schema in nodejs?
我想计算喜欢和评论的数量,它们都是 schema.The 架构中的数组,如下所示:
const PostSchema = new mongoose.Schema({
text: {
type: String,
required: "Name is required",
},
photo: {
data: Buffer,
contentType: String,
},
likes: [{ type: mongoose.Schema.ObjectId, ref: "User" }],
comments: [
{
text: String,
created: { type: Date, default: Date.now },
postedBy: { type: mongoose.Schema.ObjectId, ref: "User" },
likes: Number,
},
],
postedBy: { type: mongoose.Schema.ObjectId, ref: "User" },
created: {
type: Date,
default: Date.now,
},
});
因为点赞和评论都是数组,我想计算其中元素的数量,我是这样做的,我读到了聚合函数,但不知道如何在这里使用它,因为我必须迭代浏览所有 post 文档并获取他们的点赞和评论。
const leaderboard = (req, res) => {
Post.find({}, function (err, docs) {
docs.forEach(function (data) {
var userid = data.postedBy;
console.log(userid);
var likes = data.likes.length;
console.log(likes);
var comments = data.comments.length;
console.log(comments);
const date2 = new Date();
const diffTime = Math.abs(date2 - data.created);
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
console.log(diffDays);
const updated = User.findByIdAndUpdate(
userid,
{score: likes+comments+diffDays },
function (errr, doc) {
if (errr) {
console.log(err);
} else {
console.log("Updated User : ", doc);
}
}
);
非常感谢您的帮助,谢谢!
你可以试试projectcountcomments
和likes
的元素个数
Post.aggregate([
{$project: {_id: 1, count: {$commentssize: '$comments'},count: {$sizelikes: '$likes'}}
])
我想计算喜欢和评论的数量,它们都是 schema.The 架构中的数组,如下所示:
const PostSchema = new mongoose.Schema({
text: {
type: String,
required: "Name is required",
},
photo: {
data: Buffer,
contentType: String,
},
likes: [{ type: mongoose.Schema.ObjectId, ref: "User" }],
comments: [
{
text: String,
created: { type: Date, default: Date.now },
postedBy: { type: mongoose.Schema.ObjectId, ref: "User" },
likes: Number,
},
],
postedBy: { type: mongoose.Schema.ObjectId, ref: "User" },
created: {
type: Date,
default: Date.now,
},
});
因为点赞和评论都是数组,我想计算其中元素的数量,我是这样做的,我读到了聚合函数,但不知道如何在这里使用它,因为我必须迭代浏览所有 post 文档并获取他们的点赞和评论。
const leaderboard = (req, res) => {
Post.find({}, function (err, docs) {
docs.forEach(function (data) {
var userid = data.postedBy;
console.log(userid);
var likes = data.likes.length;
console.log(likes);
var comments = data.comments.length;
console.log(comments);
const date2 = new Date();
const diffTime = Math.abs(date2 - data.created);
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
console.log(diffDays);
const updated = User.findByIdAndUpdate(
userid,
{score: likes+comments+diffDays },
function (errr, doc) {
if (errr) {
console.log(err);
} else {
console.log("Updated User : ", doc);
}
}
);
非常感谢您的帮助,谢谢!
你可以试试projectcountcomments
和likes
Post.aggregate([
{$project: {_id: 1, count: {$commentssize: '$comments'},count: {$sizelikes: '$likes'}}
])