用蒙戈做实验。
在创建文档时,我想给文档添加一个时间戳。2原则上如下所示:
db.test3.users.insertOne(
{
name: "Bob",
timestamp: new Date()
}
);
db.test3.users.find({_id :ObjectId("639c8084d33ebcebf19ad4a2")})
[
{
_id: ObjectId("639c8084d33ebcebf19ad4a2"),
name: 'Bob',
timestamp: ISODate("2022-12-16T14:28:20.449Z")
}
]
但现在我想把它作为一个特定格式的字符串插入,Co-pilot建议如下:
db.test3.users.insertOne({
name: "Bob",
timestamp: {
$dateToString: {
format: "%Y-%m-%d %H:%M:%S.%L",
date: new Date()
}
}
})
但这不起作用,它只是将命令保存为值,而不是“执行”命令:
db.test3.users.find({_id :ObjectId("639c8173d33ebcebf19ad4a3")})
[
{
_id: ObjectId("639c8173d33ebcebf19ad4a3"),
name: 'Bob',
timestamp: {
'$dateToString': {
format: '%Y-%m-%d %H:%M:%S.%L',
date: ISODate("2022-12-16T14:32:19.333Z")
}
}
}
]
型
我显然漏掉了什么。请告知
1条答案
按热度按时间eimct9ow1#
如果要将字符串插入数据库,则应传入包含所需字段的字符串值的文档。例如:
还有几点需要指出。首先,Co-pilot基本上是试图向您展示如何在数据库中 * 将日期转换为字符串。例如,在从集合读取数据的聚合过程中,我们添加了一个字段,该字段具有日期的字符串表示形式:
同样,可以使用the
$dateToString
operator转换现有数据:型
我前面的命令在将文档发送到数据库之前在Javascript中“客户端”进行字符串转换。
另一件需要注意的事情是
db.test3.users
不是标准命名,特别是这会导致test3.users
成为集合名称,它会单独附加一些额外的数据库名称,例如:这并不是说你不能这样做,只是大多数时候集合名称是一个单词。
编辑:第三件我忘记提到的事情是,将日期存储为字符串通常不是最佳实践,以这种格式查询它们通常不够灵活或高效。