我将开始在项目中使用MongoDB并进行以下观察: “日期”必须是有效的时间点,并且不能为空。
对于MongoDB,我们不能存储空日期,所以我猜测最好的做法是从文档中排除日期字段。
例如,如果我有一个“汽车”文档和一个名为“ date_sold ”的字段。如果尚未出售汽车,则只需从文档中排除此字段即可。汽车售出后,我可以添加“ date_sold”字段。
通过上述操作,我假设我可以查询已售或未售汽车的记录。这是在MongoDB中处理“空”或空日期的推荐方法吗?
P.S。我感到困惑的原因是,由于SQL具有模式,所以日期或日期时间字段可以存储为NULL,但是在MongoDB中,“日期”字段不能为NULL,并且必须是有效的时间点。
答案 0 :(得分:3)
MongoDB类型为BSON
如果您在此处输入DATE
,您将看到:
BSON日期是一个64位整数,表示 自Unix时代(1970年1月1日)以来的毫秒数。这导致 可追溯到大约2.9亿年的日期范围,以及 未来。
因此,您需要为每个数据类型定义本身指定一个“时间点”。
通常,Unix时期-> Jan 1, 1970
用作null
,以遵循大多数处理此类日期的数据库系统上的良好做法(如果您不需要工作,日期与那些日期一样古老。
请记住这一点:
BSON日期类型已签名。负值表示1970年之前的日期。
因此,您也可以为开发设置约定的默认值,而这仅是过去的目的。例如:
Jan 1, 1900
我希望这可以澄清您。
更多提示:通常,
json
结构可能会在不同的步骤上得到验证,因此我强烈建议您维护该字段,并使用约定值表示系统中的NULL
。
答案 1 :(得分:3)
在MongoDB中没有日期要存储时,省略日期字段可以正常工作,这与传统的SQL数据库不同,传统的SQL数据库中的每个记录/文档都必须遵循相同的模式。
您可以使用$exists测试该字段中的值。