Node.js Wierd猫鼬/猫鼬行为
为什么在mongoose(或者mongodb)中,布尔Node.js Wierd猫鼬/猫鼬行为,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,为什么在mongoose(或者mongodb)中,布尔false不保存在数据库中,但它们存在于结果中 猫鼬模式: fav:{type:Boolean,默认值:false} 现在,如果我将它标记为true(通过表单输入),则只有它存储在数据库中,否则如果它是“未定义的”(如果未在表单中签入),则不会保存它 但如果我获取该字段,它将按预期输出适当的结果。 i、 e如果fav为true,则为“true”,否则为false 问题是,如果我想查询所有fav为false的文档,那么我只会得到一个返回的空数组
false
不保存在数据库中,但它们存在于结果中
猫鼬模式:
fav:{type:Boolean,默认值:false}
现在,如果我将它标记为true(通过表单输入),则只有它存储在数据库中,否则如果它是“未定义的”(如果未在表单中签入),则不会保存它
但如果我获取该字段,它将按预期输出适当的结果。
i、 e如果fav为true
,则为“true”,否则为false
问题是,如果我想查询所有fav
为false的文档,那么我只会得到一个返回的空数组,因为当值为false时,该字段(fav
)不会保存在数据库中,
但是我可以轻松地查询
fav
==true,因为它们保存在数据库中。MongoDB将false
存储在数据库中。如果你模糊地描述的事情真的发生了,那一定是因为猫鼬发出的声音。尝试将debugging设置为true,并查看实际插入的内容。如果我没有在表单中勾选'fav'输入,则会将其设置为'undefined',这是可以理解的,这就是我将默认选项设置为false的原因。但是,如果它是“未定义的”,则不会设置默认值,这很奇怪。如果未定义,我希望它标记为false。然后它在MongoDB中保存undefined
,它将被保存为null
,这是一个与false
不同的值。添加一些逻辑以保存false
,而不是undefined
。我猜Mongoose将未定义的计算为布尔类型可能会被认为是一个错误。如果某项技术不能按预期工作,那么指责该技术是错误的。请出示您的密码。既然你说的是勾选某物:如果我们说的是HTML表单复选框,那么这个值如果没有勾选就不会发送,因此它在JS中没有定义,在MongoDb中保存为null。但这告诉我,您正在将表单直接保存到MongoDB,这是一种非常糟糕的做法。在保存之前,应规范化和清理所有用户输入。