有时猫鼬将“ main_id”保存为字符串而不是ObjectId,保存后,我在mongoshell和UI客户端中看到字符串类型。
猫鼬:4.11.0
我有模式:
var building = new Schema({
location: {
main_id: { type: Schema.Types.ObjectId, ref: 'locations'},
title: {type: String},
description: {type: String}
},
year: {type: Number}
});
var User = new Schema({
my_location: {
now: building,
more: [building]
}
})
当下面的代码运行时,有时我在DB中得到字符串,而不是objectId。
user.my_location.more[i].location.main_id = new mongoose.Types.ObjectId("584fe811ed936fe74d8b470e")
user.save()
当我在保存后检查typeof user.my_location.more[i].location.main_id
时说“对象”,但在数据库中显示字符串:),当我在带有ObjectId的mongoDB中运行查询时,找不到此更新的文档
答案 0 :(得分:0)
强迫猫鼬保存一些东西 (解决了我的“有时”问题)
当我为变量猫鼬设置类似字段的值时,会检查架构的更改并仅更新它们(据我从文档中了解),但是猫鼬不会检查嵌套数组的更改。
因此,我们有两个本地技巧:
强制告诉猫鼬哪个字段被修改
user.markModified('my_location.more')
user.save() //Now all good
通过set
user.my_location.more[i].location.main_id = new mongoose.Types.ObjectId("584fe811ed936fe74d8b470e")
user.my_location.more[i].year = 2019
user.my_location.set(i, user.my_location.more) //To set whole changed object
user.save()