Mongo upsert - 指定_id类型

时间:2016-11-30 00:39:11

标签: mongodb updates upsert

当我运行upsert查询时,我希望新生成的文档具有_id类型字符串而不是Mongo Id。有可能这样做吗?目前我正在做

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

但这会创建一个像

这样的文档
 { _id: { [String: '583e1ecd39ff3ba3228523ce'] _str: '583e1ecd39ff3ba3228523ce' },
test: 1234 }

虽然我想

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

2 个答案:

答案 0 :(得分:3)

您可以在更新中使用$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 :(得分:0)

您可以指定_id字段。如果您未指定,则会自动生成。为此,你必须使用insert而不是更新(检查出来:-)我真的建议你把_id保留为ObjectId。