我有一個MongoDB中的文章集合。我選擇了一篇我想呈現的文章,並且我希望隨機選擇其他兩篇文章。我想在我的收藏中選擇兩篇不一樣的文章,而不是我之前選擇的文章。 去過這個問題了幾個小時,尋找一個解決方案,但只找到如何挑選隨機的元素,但不能除一...貓鼬得到一個除了一個之外的隨機元素
這是我現在有:
article.find({}, function(err, articles{
var articleChosen = articles.filter(selectArticleUrl, articleUrl)[0];
article.find({})
.lean()
.distinct("_id")
.exec(function(err, arrayIds){
var articleChosenIndex = arrayIds.indexOf(articleChosen._id);
arrayIds.splice(articleChosenIndex, 1);
chooseRdmArticle(arrayIds, function(articleRdm1Id){
var articleRmd1 = articles.filter(selectArticleId, articleRdm1Id)[0];
var articleRdm1Index = arrayIds.indexOf(articleRdm1Id);
arrayIds.splice(articleRdm1Index, 1);
chooseRdmArticle(arrayIds, function(articleRdm2Id){
var articleRmd2 = articles.filter(selectArticleId, articleRdm2Id)[0];
// do stuff with articleChosen, articleRmd1 and articleRmd2
})
})
})
})
其中函數其中選擇RDM文章:
function chooseRdmArticle(articles, callback){
var min = Math.ceil(0);
var max = Math.floor(articles.length);
var rdm = Math.floor(Math.random() * (max - min)) + min;
callback(articles[rdm])
}
,並從它的URL選擇文章的功能是:
function selectArticleUrl(element){
return element.url == this
}
我的想法是在包含所有ObjectId(這裏是arrayIds
)的數組上工作,在刪除articleChosen
id後隨機選擇兩個ID。但我明白arrayIds.indexOf(articleRdm1Id);
不能工作,因爲ObjectIds不是字符串...有沒有一種方法來找到我想要的Id的索引?或者有更好的主意?
非常感謝!
非常感謝!通過試圖瞭解你的答案瞭解了很多,謝謝! –