2016-11-30 46 views
0

当我运行upsert查询时,我希望新生成的文档具有_id类型的字符串而不是Mongo ID。它有可能做到这一点?目前,我正在做Mongo upsert - 指定_id类型

var data = { test: 1234 }; 
edgesCollection.update(data, { $set: data }, { upsert: true }); 

但这会建立像

{ _id: { [String: '583e1ecd39ff3ba3228523ce'] _str: '583e1ecd39ff3ba3228523ce' }, 
test: 1234 } 

文档时我想获得

{ _id: '583e1ecd39ff3ba3228523ce', test: 1234 } 
+0

试着用'替换' – harishr

回答

2

您可以使用$setOnInsert运营商的更新中,例如:

var data = { test: 1234 }; 
db.edgesCollection.update(data, { $set: data, $setOnInsert: {_id : "my string id"} }, { upsert: true }); 

> db.edgesCollection.find() 
{ "_id" : "my string id", "test" : 1234 } 

详情请参阅https://docs.mongodb.com/manual/reference/operator/update/setOnInsert/

+1

谢谢我不知道'$ setOnInsert' – Guig

0

可以指定_id领域。如果你没有指定它会自动生成。为了这个工作,你必须使用插入而不是更新(检查出来:-)我真的建议你把_id作为ObjectId。