有没有一种方法可以在mongoose中声明一个模型模式,这样当模型是新的时,_id字段就会自动生成?
例如:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectIdSchema = Schema.ObjectId;
var ObjectId = mongoose.Types.ObjectId;
var PersonSchema = new Schema({
_id: ObjectIdSchema,
firstName: {type: String, default: 'N/A'},
lastName: {type: String, default: 'N/A'},
age: {type: Number, min: 1}
});
var Person = mongoose.model('Person', PersonSchema);
_id: {type:ObjectIdSchema, default: new ObjectId()}
但这当然不起作用,因为new ObjectId()只在模式初始化时被调用。因此,两次调用new person()将创建两个具有相同_id值的对象。
那么,有没有一种方法可以让我每次执行“newperson()”时都会生成一个新的ObjectId()?
我之所以尝试这样做,是因为我需要知道新人的_id值,以便进一步处理。
我也尝试过:
var person = new Person({firstName: "Joe", lastName: "Baz"});
person.save(function(err, doc, num){
console.log(doc._id);
});
即使这样,doc也不包含ObjectID。但是如果我在数据库中查找,它确实包含它。
p、 我用的是猫鼬2.7。1.
p. p. s.我知道我可以在创建对象时手动创建对象:
var person = new Person({_id: new ObjectId(), firstName: "Joe", lastName: "Baz"});
我想我已经习惯了使用java驱动程序的mongob,在那里我可以创建模型构造函数中的_id字段的值。
而不是:
_id: {type:ObjectIdSchema, default: new ObjectId()}
你应该做:
_id: {type:ObjectIdSchema, default: function () { return new ObjectId()} }
添加auto
标志:
_id: {
type: mongoose.Schema.Types.ObjectId,
index: true,
required: true,
auto: true,
}
来源
调用var person=new person()的那一刻;人_id应该给你id(即使它还没有被保存)。只需实例化它就足够给它一个id了。之后您仍然可以保存它,这将存储id以及person对象的其余部分
问题内容: 我想用Mongoose 生成一个MongoDB 。有没有办法从Mongoose 访问构造函数? 这个问题是关于从头开始 产生新的 。生成的ID是全新的通用唯一ID。 另一个问题是关于从 现有的字符串表示形式 创建一个。在这种情况下,您已经具有ID的字符串表示形式(它可能是通用的也可能不是唯一的),并且正在将其解析为。 问题答案: 您可以在找到构造函数。这是一个例子: 是一个新生成的。
问题内容: 我有一个我以前从未见过的问题,猫鼬的findByIdAndUpdate没有在回调中返回正确的模型。 这是代码: 数据库中的原始文档如下所示: 进入的updateObj如下所示: 从回调返回的模型与原始模型相同,而不是updatedObj。如果我查询数据库,它已正确更新。它只是没有从数据库中返回。 这感觉像是一个“愚蠢的用户”错误,但我看不到它。任何想法表示赞赏。 问题答案: 在Mong
问题内容: 我有一个让我感到困惑的奇怪问题。我有一个模型: 变体条目如下所示: 我需要添加一个新字段-说“颜色”。所以我这样做是为了批量更新: 但是,“颜色”字段未设置-如果我再次浏览并注释掉该行,则它不会显示。我似乎无法弄清楚为什么要这样做。我有一个onSave事件,该事件已正确触发,因此可以保存。我也没有对版本结构进行任何检查- 即没有代码只允许代码和价格。我显然缺少了一些东西,但几个小时后我
问题内容: 我正在开发一个新项目(),并创建了一个包含大量变量的Object。由于我打算为所有这些添加吸气剂和设置器,所以我想知道:是否存在在给定类中自动生成吸气剂和设置器的捷径? 问题答案: 在所需类的源代码窗口中弹出上下文菜单(即右键单击)。然后选择子菜单;从该菜单中进行选择将导致出现向导窗口。 选择您要为其创建getter和setter的变量,然后单击。
问题内容: 我有一个典型的架构和模型: 当我执行此更新时,它仅在定义回调时才有效,否则仅执行但数据库中的值未更改: 这有效: 这是一个错误吗?我没有在文档中看到是否需要回调,但是要求这样做很奇怪……我认为我在这里缺少了一些东西。 注意:我通过电子邮件匹配以测试建议,我在NodeJS v0.8.17中使用猫鼬v3.5.4,并具有简单的Express v3.0.6设置。 提前致谢。 问题答案: 用猫鼬
问题内容: 我有看起来像这样的代码: 它返回一个长度为32的字符串,但我认为它不是有效的UUID。如果它是一个真正的UUID,为什么它是一个UUID,什么是代码,修改的值的目的和。 有没有更好的方法来生成UUID? 问题答案: 这些行将字节6和8的值限制在特定范围内。返回range内的随机字节,这些字节不是UUID的所有有效值。据我所知,这应该对片中的所有值进行。 如果您使用的是Linux,则可以