如何使用Mongodb中另一个表的_id更新一个表
我将MySQL数据库中的数据导出为JSON,并将其导入MongoDB。问题是: 当我导入客户机时,MongoDB创建了自己的_id字段(我知道这是内置的功能,但MySQL使用了clientID,自动递增整数) 因此,当我导入约会集合时,clientID被重命名为oldClientID。我希望clientID字段是相应客户端的ObjectID 我的模式:如何使用Mongodb中另一个表的_id更新一个表,mongodb,mongoose,Mongodb,Mongoose,我将MySQL数据库中的数据导出为JSON,并将其导入MongoDB。问题是: 当我导入客户机时,MongoDB创建了自己的_id字段(我知道这是内置的功能,但MySQL使用了clientID,自动递增整数) 因此,当我导入约会集合时,clientID被重命名为oldClientID。我希望clientID字段是相应客户端的ObjectID 我的模式: const apptSchema = new mongoose.Schema({ ID: Number, clientID: {
const apptSchema = new mongoose.Schema({
ID: Number,
clientID: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Client'
},
oldClientID: Number,
...other field data
});
const clientSchema = new mongoose.Schema({
ID: Number,
familyID: Number,
first: String,
last: String,
});
样本患者数据:
{
"_id" : ObjectId("5d82240f7c8ddd03b62aee6a"),
"ID" : 18,
"familyID" : 6,
"first" : "Jane",
"last" : "Doe"
}
预约数据样本
{
"_id" : ObjectId("5d82c8b95627367d122087f9"),
"ID" : 1885,
"oldPatientID" : 18,
"scheduled" : ISODate("2015-08-05T11:20:00Z"),
"note" : ""
},
{
"_id" : ObjectId("5d82c8b95627367d122088a8"),
"ID" : 2066,
"oldPatientID" : 18,
"scheduled" : ISODate("2015-09-17T16:00:00Z"),
"note" : ""
}
约会应该是什么样的:
{
"_id" : ObjectId("5d82c8b95627367d122087f9"),
"ID" : 1885,
"clientID": ObjectId("5d82240f7c8ddd03b62aee6a"),
"oldPatientID" : 18,
"scheduled" : ISODate("2015-08-05T11:20:00Z"),
"note" : ""
},
{
"_id" : ObjectId("5d82c8b95627367d122088a8"),
"ID" : 2066,
"clientID" : ObjectId("5d82240f7c8ddd03b62aee6a"),
"oldPatientID" : 18,
"scheduled" : ISODate("2015-09-17T16:00:00Z"),
"note" : ""
}
我愿意学习如何在mongo shell中实现这一点,或者在express中使用mongoose(或者如果有另一种很酷的方式,比如在Robo3T中)。MongoDB将始终使用
\u id
作为主键,这种行为不能被覆盖,尽管您可以将\u id
与自定义id中的值一起使用。尽管这可能会让人困惑,但最好对自定义id使用索引,并且您不需要对自定义索引字段使用ObjectId
,但可以使用您自己的自定义id架构,如UUID
或递增整数值等,尽管它必须由您或某些框架生成/递增,如JPA
检查
对于猫鼬,你可以这样做
new mongoose.Schema({
customId: { type: Number, index: true }
...other field data
});
有了Ok,这对我来说是可行的,尽管我确信必须有一个更简单的方法:
db.getCollection("appts").aggregate(
[
{
"$lookup" : {
"from" : "clients",
"localField" : "clientID",
"foreignField" : "ID",
"as" : "CLIENT"
}
},
{
"$lookup" : {
"from" : "appttypes",
"localField" : "type",
"foreignField" : "ID",
"as" : "TYPE"
}
},
{
"$lookup" : {
"from" : "apptstatuses",
"localField" : "status",
"foreignField" : "ID",
"as" : "STATUS"
}
},
{
"$project" : {
"_id" : "$_id",
"clientID" : "$CLIENT._id",
"scheduled" : "$scheduled",
"note" : "$note",
}
},
{
"$out" : "apptslinked"
}
]
);
然后我将其导出为JSON,删除appts表,并使用该文件执行mongoimport。噢!我不知道我能做到。我最终使用了一个带有查找阶段的聚合查询,然后将表中的_id投影到clientID字段中。将其保存为新表,并通过mongo方式连接。谢谢你!我喜欢这个主意@我明白了,但是您仍然可以在默认的模式创建步骤中将自定义字段作为
\u id
传递,但通常忽略\u id
,并且自定义字段与索引一起使用