gpt4 book ai didi

javascript - 将 $nin 和 $sample 与 mongodb 聚合一起使用

转载 作者:可可西里 更新时间:2023-11-01 10:23:08 26 4
gpt4 key购买 nike

我有一个 mongodb,其中包含一个包含音乐排行榜上的每首歌曲的集合。我写了一个脚本,它接受我想要的歌曲数量以及我想要随机选择歌曲的年份的输入。到目前为止一切顺利。

但是,我试图做到这一点,因为返回的歌曲中没有重复的歌曲,我试图通过在返回时将每首歌曲的 _id 值插入数组然后使用$nin 在聚合的 $match 阶段。

var getSongs = function(number, year, db, callback) {
var collection = db.collection('songsList');
var songIds = [];
var chartSongs = [];
for (var i = 0; i < number; i++) {
// Get one random document from the collection.
collection.aggregate([
{
$match: { '_id': { '$nin': songIds }, 'songYear': year }
},
{
$sample: { size: 1 }
}
],
function(err, chart) {
songIds.push(chart[0]._id);
chartSongs.push(chart[0]);
if (songIds.length === number) {
callback(chartSongs);
}
})
}
};

但是,虽然我得到了正确数量的返回歌曲,但我仍然在那个随机列表中得到重复的歌曲。

如果有人可以提供建议,甚至提供更好的方法,我将不胜感激。

最佳答案

这个怎么样?

var getSongs = function(number, year, db, callback) {
var collection = db.collection('songsList');
collection.aggregate([
{
$match: { 'songYear': year }
},
{
$sample: { size: number }
}
],
function(err, charts) {
callback(charts);
});
};

关于javascript - 将 $nin 和 $sample 与 mongodb 聚合一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36552466/

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