gpt4 book ai didi

node.js - MongoDB 无法 $unset 特定字段;自动 _id 字段位于末尾

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:56 25 4
gpt4 key购买 nike

我正在编写代码,使用 NodeJS 的普通 MongoDB 驱动程序通过网站管理一组商家。当商家尝试确认他们的帐户时,我遇到了麻烦。预计代码会使用 $unset 从数据库中删除该值,从而激活商家的帐户。相反,查询返回 true,但确认字段保持不变。以下是 db.merchants.find({}) 打印的数据库中有问题的商家之一的示例(添加换行符以提高可读性):

{ "email" : "test@test.com", "password" : "<hashed password is here>", 
"salt" : "<salt is here>", "access" : "merchant",
"created" : 1444000000000, "confirm" : "bKEQD0aiV8aXIQPY4CUxCm7KGSZ2pFJM",
"name" : "Test user",
"contact" : { "name" : "Test User",
"address" : "123 Cedar Ln N",
"city" : "Some City", "state" : "AA",
"zip" : "00000", "country" : "USA",
"phone" : "5555555555" },
"_id" : ObjectId("56133111d30ce5d4736323cb") }

假设有效,这是用于将项目插入数据库的 JS:

db.collection("merchants").insert({
name: "Test user",
email: "test@test.com",
.... more fields....,
confirm: "bKEQD0aiV8aXIQPY4CUxCm7KGSZ2pFJM"
}, someCallback);

...这是我尝试取消设置“确认”字段的方法:

db.collection("merchants").findOne({email: "test@test.com"}, function(err, user) {
if(err) return handleError();
if(!user) return sendFailureMessageToClient();
if(client.confirm == user.confirm) {
db.collection("merchants").update({_id: user.id},
{$unset: {confirm: true}}, someCallback);
}
}

我确信上面的更新命令实际上正在执行。

我认为上面的数据有趣的一件事是 _id 字段位于末尾......这通常会发生吗?这会扰乱更新命令的 $unset 吗?如果这不是问题,那是什么?

提前感谢您的帮助。

编辑:我展示了为什么我使用单独的 findOne 请求然后更新。

最佳答案

_id是ObjectId的特殊BSON对象。使用 id 字符串是不够的。您可能还想使用 _id:

db.collection("merchants").update({_id: ObjectId(user._id)},

您可能还想使用findAndModify

关于node.js - MongoDB 无法 $unset 特定字段;自动 _id 字段位于末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32961065/

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