我找不到如何獲取所有符合標準的檔案。我有一個名為 Id 的欄位:
parent = 1
以及包含這些組合的串列:
[
{ year: 2021, month: 1 },
{ year: 2021, month: 0 },
{ year: 2020, month: 11 },
{ year: 2020, month: 10 }
]
檔案如下所示:
id: Id
parent: Id
year: Number
month: Number
我正在嘗試查找與父項匹配的所有檔案,其中月份和年份都與串列中的任意 1 個匹配。
任何的想法?我試過 elemMatch 但沒有成功。
const foundDocuments = await Document.find({
parent, results: { $elemMatch: { list } },
});
示例資料:
[
{id: 4, parent: 1, year: 2021, month: 5 },
{id: 5, parent: 1, year: 2021, month: 4 },
{id: 6, parent: 1, year: 2021, month: 3 },
{id: 7, parent: 1, year: 2021, month: 2 },
{id: 8, parent: 1, year: 2021, month: 1 },
{id: 9, parent: 1, year: 2021, month: 0 },
{id: 10, parent: 1, year: 2020, month: 11 },
{id: 11, parent: 1, year: 2020, month: 10 },
{id: 12, parent: 1, year: 2020, month: 9 },
{id: 13, parent: 2, year: 2021, month: 1 },
{id: 14, parent: 2, year: 2021, month: 0 },
{id: 15, parent: 2, year: 2020, month: 11 },
{id: 16, parent: 2, year: 2020, month: 10 },
{id: 17, parent: 2, year: 2020, month: 9 },
]
預期輸出:
[
{id: 8, parent: 1, year: 2021, month: 1 },
{id: 9, parent: 1, year: 2021, month: 0 },
{id: 10, parent: 1, year: 2020, month: 11 },
]
uj5u.com熱心網友回復:
由于您使用的是 JS,您可以創建查詢以將所有對值添加到如下串列中:
const list = [
{ year: 2021, month: 1 },
{ year: 2021, month: 0 },
{ year: 2020, month: 11 },
{ year: 2020, month: 10 }
]
const parentId = 1
var findObj = {
parent:parentId,
$or:list.map(m => {
return {year:m.year,month:m.month}
})
}
console.log(findObj)
這里的 find 物件與本示例查詢中使用的相同,因此您只需要添加到查詢中
const foundDocuments = await Document.find(findObj);
請注意查詢中的技巧是如何對$or所有可能的對值進行操作。此外,您的預期輸出不包括 id 11。這是一個錯誤嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/329206.html
