gpt4 book ai didi

node.js - 如何解决 NodeJS 和 MongoDB 中的这种(IMO)意外行为

转载 作者:太空宇宙 更新时间:2023-11-03 22:38:12 25 4
gpt4 key购买 nike

基本上我的类别模型文件中有这个函数:

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:请注意,在这种情况下,上述内容是删除对象内的对象,因此是空的“”。

最佳答案

当您创建此对象文字时:

{ $unset : { finalSub: "" } }

你得到:

{ "$unset": { "finalSub": "" } }

这显然不是你想要的。但是,除非您期望 $unset 部分抛出 ReferenceError,否则它是一致的。您必须以不同的方式构建该对象:

updateObj = { $unset: {} }
updateObj.$unset[finalSub] = ""

然后您可以使用 updateObj 代替文字:

        updateObj = { $unset: {} }
updateObj.$unset[finalSub] = ""
category_collection.update(

{_id: category_collection.db.bson_deserializer.ObjectID.createFromHexString(categoryId)},
updateObj,
function(error, subcategory) {

if(error) callback(error);

else callback(null, subcategory)

}

)

关于node.js - 如何解决 NodeJS 和 MongoDB 中的这种(IMO)意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20639211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com