簡體   English   中英

如何使用嵌套層次結構更新嵌入式文檔?

[英]How do I update an embedded document with a nested hierarchy?

我有一個需要更新的嵌入式文檔。 除了一種情況,我設法使所有工作正常:我無法獲取具有嵌套層次結構的嵌入式文檔來進行更新。 這是我嘗試做的一個例子:

console.log('Phone type: ' + req.body.phone.type); // prints, e.g., 'Phone type: Work'
console.log('Phone #: ' + req.body.phone.number); // prints, e.g., 'Phone #: 555-555-5555'

var updateData = {
        "user.$.contact_info": {
            email: req.body.email,
            phone: {
                type: req.body.phone.type,
                number: req.body.phone.number
            }
        }
    };
    Group.update(
        { "user._id" : req.params.user_id },
        { $push : updateData },
        function(err,data) {
            console.log('Success!'); // I see the "Success!" message every time I save a record
        }
    );

架構:

var contactInfoSchema = mongoose.Schema({
    created : {
        type: Date,
        default: Date.now
    },
    email : String
    phone: {
        type: String,
        number: String
    }
});

var userSchema = mongoose.Schema({
    created : {
        type: Date,
        default: Date.now
    },
    contact_info : [contactInfoSchema]
});

var GroupSchema = mongoose.Schema({
    created : {
        type: Date,
        default: Date.now
    },
    users : [userSchema]
});

我發現我可以創建記錄,但是只存儲電子郵件地址,而不存儲電話信息。 在檢查控制台時,我可以看到正在發送電話類型和電話號碼信息,但是它並沒有在數據庫中更新。 我究竟做錯了什么?

使用“ type”關鍵字的“ contactInfoSchema”中的問題。 你需要這個:

var contactInfoSchema = mongoose.Schema({
    created : {
        type: Date,
        default: Date.now
    },
    email : String
    phone: {
        "type": { "type": String },
        number: String
    }
});

因此,由於您試圖將“子文檔”字段稱為“類型”,所以基本上貓鼬感到困惑,它認為這是“電話”字段的數據“類型”。 宣布以上一切工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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