2
這個(IMO)意外行爲基本上我有我的類模型文件這一功能:如何解決的NodeJS和MongoDB
Categories.prototype.delSubcategory = function(categoryId, subcategory, callback) {
var finalSub = "subcategories." + subcategory;
finalSub = '"' + finalSub + '"';
this.getCollection(function(error, category_collection) {
if(error) callback(error);
else {
category_collection.update(
{_id: category_collection.db.bson_deserializer.ObjectID.createFromHexString(categoryId)},
{ $unset : { finalSub: "" } },
function(error, subcategory) {
if(error) callback(error);
else callback(null, subcategory)
}
)
}
});
};
如果我console.log(finalSub)
我會看到"subcategories.myvalue"
打印預期。所以,當我在我的應用程序中使用這個函數時,函數應該按預期更新文檔,但是它不會。也沒有顯示任何錯誤。如果我在shell中複製類似的行爲,它將起作用,文檔將相應地更新。
如果,而是採用{ $unset : { finalSub: "" } }
我用{ $unset : { "subcategories.myValue": "" } }
,硬編碼在它的工作函數的值,所以這個問題似乎只有當我在一個變量傳遞一個字符串發生,我不明白爲什麼。
任何想法?
PS:請注意,在這種情況下,前面提到的意思是刪除一個對象內部的一個對象,因此這個empt「」。
不幸的是,不工作,如,如果我用蒙戈抱怨在以下結構中的前面的代碼:'{updatebj。$ unset [finalSub] =「」}'。事實上,我甚至無法在對象內使用點符號。它看起來幾乎就像對象內的代碼沒有被執行,而是簡單地作爲字符串傳遞。 – WagnerMatosUK
@WagnerMatosUK您似乎無法理解JavaScript中的對象文字是如何工作的。如果您使用我提供的代碼而不是使用文字,它將正常工作。 –
不幸的是,你是對的,我對js很陌生,仍然對事物感到困惑。我試過你的代碼,它似乎沒有工作。可能是因爲我把它放錯了。上面的函數如何在你的代碼中看起來像?我所有的嘗試都失敗了。 – WagnerMatosUK