Mongo upsert - 指定 _id 类型
Mongo upsert - specify _id type
当我 运行 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 }
您可以指定_id 字段。如果您不指定,它将自动生成。为此,您必须使用插入而不是更新(查看 :-) 我真的建议您将 _id 保留为 ObjectId。
您可以在更新中使用 $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/。
当我 运行 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 }
您可以指定_id 字段。如果您不指定,它将自动生成。为此,您必须使用插入而不是更新(查看 :-) 我真的建议您将 _id 保留为 ObjectId。
您可以在更新中使用 $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/。