2016-11-30 48 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。