我有一个包含3列的表:name,age,tm。
它有(名称,年龄)的复合索引
如果使用MySQL,SQL可能是这样的:
insert into tt(name,age,tm) values('chenlong', 29, 1504437683) on duplicate key update tm = 1504437683
如何在mongodb中使用?
db.tt.find()
{ "_id" : ObjectId("59abe43ade8616599017a085"), "name" : "chenlong", "age" : 29, "tm" : ISODate("2017-09-03T11:32:04.156Z") }
db.tt.update(
{name:'chenlong',age:29},
{
$set: {tm:ISODate()},
$setOnInsert: {tm:ISODate()}
},
{ upsert: true }
)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
db.tt.find()
{ "_id" : ObjectId("59abe43ade8616599017a085"), "name" : "chenlong", "age" : 29, "tm" : ISODate("2017-09-03T11:33:09.359Z") }
没关系,列tm变得更新了,但添加了一条新记录,错误发生了。
db.tt.update(
{name:'chenlong',age:30},
{
$set: {tm:ISODate()},
$setOnInsert: {tm:ISODate()}
},
{ upsert: true }
)
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 16836,
"errmsg" : "**Cannot update 'tm' and 'tm' at the same time**"
}
})
如何解决问题?感谢。
答案 0 :(得分:0)
这将有效
db.tt.update(
{name:'chenlong',age:30},
{
$set: {tm:ISODate()}
},
{ upsert: true }
)
如果文档匹配,它将更新或发生upsert。