我想獲取陣列中嵌套物件的值。我得到了父物件的_id,以及陣列中子物件的_id,但我無法檢索“solvedOn”的值來切換復選框(行為)。
所以這是一個帶有嵌套物件的示例物件:
{
_id: new ObjectId("6292722ea8173377658171ff"),
title: 'work-list',
tasks: [
{
name: 'go to work',
createdOn: '2022-05-28T19:04:14.799Z',
solvedOn: false,
_id: new ObjectId("6292722ea8173377658171f8")
},
{
name: 'do some work',
createdOn: '2022-05-30T17:20:56.272Z',
solvedOn: false,
_id: new ObjectId("6294fdbf8717c09237c5098e")
}
],
__v: 0
}
所以我已經這樣走了:
List.findOne(
{_id: listID},
{tasks: {
$elemMatch: {
_id: taskID
}
}},
(err, res) => {
console.log(res.tasks);
}
)
當我嘗試記錄“res.tasks.solvedOn”時,結果是“未定義”。即使,當我使用占位符時:“res.tasks.$.solvedOn”
這是我回來的:
[
{
name: 'go to work',
createdOn: '2022-05-28T19:04:14.799Z',
solvedOn: false,
_id: new ObjectId("6292722ea8173377658171f8")
}
]
那么我如何使用“solvedOn”的值來切換復選框的狀態呢?
喜歡:
If (true) { // set value to false } else {// set value to true }
uj5u.com熱心網友回復:
你需要寫res.tasks[0].solvedOn而不是res.tasks.solvedOn
因為你tasks是一個陣列
uj5u.com熱心網友回復:
當您撰寫res.tasks時,它會回傳一個任務陣列。所以你不能solvedOn用res.tasks.solvedOn. 您應該給出陣列的索引以獲取它的值。喜歡res.tasks[0].solvedOn。
我的建議是首先將所有任務放在一個陣列中,例如:
const tasks = res.tasks;
然后將其映射到您想要的任何位置。
uj5u.com熱心網友回復:
如果您需要的專案可能不是第一個專案,您可以使用一個聚合管道$filter:
db.collection.aggregate([
{
$match: {_id: ObjectId("6292722ea8173377658171ff")}
},
{
$project: {
_id: 0,
res: {
$filter: {
input: "$tasks",
as: "item",
cond: {$eq: ["$$item._id", ObjectId("6294fdbf8717c09237c5098e")]}
}
}
}
}
])
游樂場示例
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/485752.html
標籤:javascript 节点.js 数组 mongodb 表示
