如何在 MongoDB 中自动插入默认值或更新忽略
我在使用 Upsert 操作时遇到问题。
我的表中有两个日期字段,“创建”和“更新”,我使用更新操作,当一条记录不存在时执行 INSERT 操作,否则执行 UPDATE 操作。
第一次插入时,“创建”字段和“更新”字段都自动设置当前日期,下次更新时,“创建”字段忽略,更新“更新”字段。
但我不能在一个声明中做到这一点。这是我的代码:
colls.Update(Query.EQ("_id", page.Id),
Update.Set("created", page.Created)//in here,how to??
.Set("updated", page.LastUpdated)
.Inc("freq", 1), UpdateFlags.Upsert, SafeMode.False);
我的序列化代码:
cm.MapProperty<DateTime>(c => c.Created).SetElementName("created")
.SetSerializationOptions(datetimeSerializationOptions)
.SetDefaultValue(DateTime.Now);
cm.MapProperty<DateTime>(c => c.LastUpdated).SetElementName("updated")
.SetSerializationOptions(datetimeSerializationOptions);
I got a problem that use Upsert operation.
i have two date fields in the table,"created" and "updated",i use update operation that do INSERT operation when one record doesn't exist,otherwise do UPDATE operation.
when first time insert,the "created" field and "update" field both automatic set current date,when next time update,"the created" field ignore,update "update" field.
but i can't in one statement do that.Here is my code:
colls.Update(Query.EQ("_id", page.Id),
Update.Set("created", page.Created)//in here,how to??
.Set("updated", page.LastUpdated)
.Inc("freq", 1), UpdateFlags.Upsert, SafeMode.False);
my serialize code:
cm.MapProperty<DateTime>(c => c.Created).SetElementName("created")
.SetSerializationOptions(datetimeSerializationOptions)
.SetDefaultValue(DateTime.Now);
cm.MapProperty<DateTime>(c => c.LastUpdated).SetElementName("updated")
.SetSerializationOptions(datetimeSerializationOptions);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
目前 mongodb 不支持“upsert”,如果插入或更新,其行为会有所不同。但这是他们在 jira 中的计划。因此,在决定插入或更新之前检查记录是否存在(只需使用多重查询);或者等待新版本的mongodb。
Currently mongodb doesn't support "upsert"s which behaves differently if its an insert or an update. but its on their plan in jira. So eigther you do a check if the record exists before deciding on insert or update (simply use multi query); or wait for the new version of mongodb.