簡體   English   中英

如何在 mongoose 中查詢模式中的數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM