![](/img/trans.png)
[英]How do I structure my Mongoose schema to patch a user's input as an object within an array?
[英]How do I query an array within a schema in mongoose?
真的堅持查詢嵌套在模式中的數組。
列表架構如下所示:
const listSchema = new mongoose.Schema({
name: String,
items: [cardSchema]
});
我希望能夠查詢特定項目的特定列表,並認為這會起作用:
const listId = req.body.listId;
const itemId = req.body.itemId;
List.updateOne({
"_id": listId
}, {
$pull: {
items: {
"_id": itemId
}
}
});
據我了解,我正在通過“listId”的 id 更新列表,然后從中刪除一些內容。 我要刪除的東西在“items”數組中,id 為“itemId”。 但是,這沒有任何作用。
我有一個更笨拙、更嚴厲的方法來解決這個問題,如下所示:
List.findOne({
_id: listId
}, function (err, list) {
if (err) {
console.log(err)
} else {
const listItems = list.items
listItems.forEach(function (item) {
if (item._id == itemId) {
const index = listItems.findIndex(function (i) {
return i.id === itemId
})
if (index !== -1) listItems.splice(index, 1);
list.save();
}
})
}
但我更喜歡前者。 當在數組中的數組中嵌套數組時,后者似乎很可笑,所以我知道這不是明智的方法。
我認為您正在尋找位置$
運算符。
如果您有以下架構:
const listSchema = new mongoose.Schema({
name: String,
items: [cardSchema]
});
給定const listId = req.body.listId;
和const itemId = req.body.itemId;
; 如果您的最終目標是使用itemId
刪除項目,我相信下面的代碼應該可以解決問題。
List.findOneAndUpdate(
{ "_id": listId, "items._id": itemId },
{
"$pull": {
"items.$": item
}
},
{ 'new': true }
);
請注意,這是未經測試的。
我最終找到了解決方案:
List.findOne({listId}, function (err, list) {
list.items.id(itemId).remove();
list.save();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.