Node.js 如何使用Mongoose向现有文档添加属性?
我在数据库中有一个现有的用户对象 我修改了models/user.js,在用户模式中添加了一个属性“isAdmin”Node.js 如何使用Mongoose向现有文档添加属性?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我在数据库中有一个现有的用户对象 我修改了models/user.js,在用户模式中添加了一个属性“isAdmin” , isAdmin : { type: Boolean, default: false } 但是现在当我保存文档时(即:我更新我的个人资料)。isAdmin属性在我的应用程序中的I console.log(user)时显示…(如预期为false)…但当我直接转到mongo db控制台时,它不在现有文档中 如果我创建一个新的用户对象,isAdmin属性将出现在新文档中
, isAdmin : { type: Boolean, default: false }
但是现在当我保存文档时(即:我更新我的个人资料)。isAdmin属性在我的应用程序中的I console.log(user)时显示…(如预期为false)…但当我直接转到mongo db控制台时,它不在现有文档中
如果我创建一个新的用户对象,isAdmin属性将出现在新文档中。如何将此属性添加到现有文档中,使其直接显示在数据库中
编辑:我决定添加一个
角色
属性,只需修改特定用户在robomongo中将其角色设置为管理员
,而不是使用mongoose。只需更新MongoShell中的现有文档以添加新属性。我同意Hector编写代码来处理丢失的属性isAdmin
字段与设置为false
的字段相同,而不必为此烦恼
但是,如果您希望这样做,一种方法是显式地将isAdmin
标记为已修改,以便后续调用save
时写出默认值:
doc.markModified('isAdmin');
doc.save();
出于好奇,您为什么希望所有文档都具有新属性?像MongoDB这样的文档数据库的部分吸引力在于并非所有文档都需要具有相同的结构。我宁愿利用这一点,也不愿“对抗”它。我定义了模式并保存了用户对象,希望能够手动进入数据库并为我的帐户将isAdmin标志设置为true。但是这个属性没有出现。即使当我使用mongoose转储对象时,它也被设置为false。这让我很困惑。嘿@chovy我也有同样的问题,事实上我也在尝试向定义的mongoose模型添加一个新属性,例如,如果您已经向模型添加了一个新属性isAdmin,那么只有新用户才能在集合中拥有isAdmin属性,对吗?,在处理请求时,我们缺少旧用户的isAdmin属性..,您将如何处理此问题?您可能会争辩说,旧用户将获得false属性,但我不这么认为,我必须尝试..,有人尝试过吗?事实上,我有点担心在不使用Mongoose的情况下手动添加属性可能会导致一些冲突。哦,我明白了。但是,除非这个持久化框架有一些模式选项,比如
ifNull:false
,否则我认为它不会给文档添加缺少的属性。最后,我添加了一个user.role
属性,并使用Robomongo手动更新为等同的user.role='admin'
,对于我的管理员用户,这对于生产应用程序来说是不合理的,尤其是那些具有大量记录的应用程序,其中,运行这种类型的查询将花费大量的时间time@Hypermattt也许散列索引会有所帮助,如果案例是find({isAdmin:true}),它将如何工作,这里的文档是什么?事实上,他正试图向定义的mongoose模型添加一个新属性,例如,他向模型添加了一个新属性isAdmin,那么,只有新用户在集合权限中才具有isAdmin属性?并且在处理请求时,我们缺少旧用户的isAdmin属性..,您将如何处理此问题?您可能会争辩说,旧用户将获得false属性,但我不这么认为,我必须尝试..,有人尝试过吗?