gpt4 book ai didi

javascript - Mongoose $slice 并获取原始大小的数组

转载 作者:行者123 更新时间:2023-11-30 14:24:13 24 4
gpt4 key购买 nike

我目前正在尝试获取新闻对象中的项目总数,并将项目的一部分作为对象返回。我发现了如何在查询中使用 $slice 运算符,但我不知道如何获取项目数组的原始大小。我目前在 NodeJS 中使用的代码:

if (req.query.limit) {
limit = 5;
}
News.findOne({ connected: club._id }, {items: {$slice: limit}}).exec(function (err, news) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else if (!news || news.items.length === 0) {
res.jsonp([]);
} else {
const returnObj = { items: [], totalNumber: 0 };
const items = news.items.sort(function (a, b) {
return b.date - a.date
});
res.jsonp({
items: items,
totalNumber: news.items.length
});
}
});

Mongo 模型:

 var mongoose = require('mongoose'),
validator = require('validator'),
Schema = mongoose.Schema;

var NewsSchema = new Schema({
connected: {
type: Schema.Types.ObjectId,
required: 'Gelieve een club toe te wijzen.',
ref: 'Club'
},
items: [{
userFirstName: String,
action: String,
date: Date,
targetName: String
}],
created: {
type: Date,
default: Date.now
}
});

module.exports = mongoose.model('News', NewsSchema);

我如何有效地做到这一点?

谢谢!

编辑:有效的最终代码:

News.aggregate([{
$match: {
connected: club._id
}
}, {
$project: {
totalNumber: {
$size: '$items'
},
items: {
$slice: ['$items', limit]
}
}
}
]).exec(function (err, news) {
console.log(news);
if (!news || news[0].items.length === 0) {
res.jsonp([]);
} else {
res.jsonp(news[0]);
}
});

最佳答案

您不能使用 find$slice 同时获得这两个信息。


您拥有的资源:


使用 aggregate 返回 count 并且仅返回 sliced 值。

喜欢:

[{
$project: {
count: {
$size: "$params",
},

params: {
$slice: ["$params", 5],
},
},
}]

为了帮助您制作聚合,您可以使用很棒的mongodb-compass 软件及其聚合实用工具。

enter image description here


使用不带 $slicefind,获取那里的项目数,然后在返回数组之前用 javascript slice 数组。



编辑:

   [{
$sort: {
'items.date': -1,
},
}, {
$project: {
count: {
$size: "$items",
},

params: {
$slice: ["$items", 5],
},
},
}]

关于javascript - Mongoose $slice 并获取原始大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52199798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com