我環顧四周,看到很多類似的問題,但我不太明白為什么我的代碼不起作用。我對 MongoDB 還很陌生,所以我可能使用不正確的東西。我基本上只是想選擇一個隨機檔案,但過濾掉那些通過陣列傳遞的檔案。在請求正文中,我們將以下內容發布到服務器:
{
"chosen_lists": ["62718d522a2b7790b4052331"]
}
而且我有我的代碼來嘗試過濾并回傳任何沒有該ID的隨機檔案,如下所示:
const chosenLists = req.body.chosen_lists;
list = await List.aggregate([
{ $match: { _id: { '$nin': chosenLists } }},
{ $sample: { size: 1 } }
], (err, docs) => docs);
不幸的是,服務器只回傳一個隨機選擇的檔案,并沒有將其過濾掉。我還添加了引號,_id
但這似乎也不起作用。提前感謝您的幫助!
編輯:我當前將選擇串列的 id 作為字串而不是 ObjectIds 傳遞。我只是嘗試抓住第一個并將其轉換為 ObjectId,但這也不起作用:
list = await List.aggregate([
{ $match: { _id: mongoose.Types.ObjectId(req.body.chosen_lists[0]) } },
{ $sample: { size: 1 } }
], (err, docs) => docs);
uj5u.com熱心網友回復:
如果您的_id
屬性是一個,ObjectId
您應該將其決議為字串,如下所示:
const List = await List.aggregate([
{
$project: {
_id: {
$toString: "$_id"
}
}
},
{ $match: { _id: { '$nin': chosenLists } }},
{ $sample: { size: 1 } }
]);
注意:欄位名 _id 保留作為主鍵使用;它的值在集合中必須是唯一的,是不可變的,并且可以是陣列以外的任何型別,因為默認 mongo 將其用作ObjectId
.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/470255.html