我想保存一个 ObjectId 数组,我通过猫鼬通过 REST 接口获得它到 mongodb。我经常遇到这样的问题,即当我将 objectsId 从 REST 接口保存到数据库时,我会收到转换错误。服务器端代码是用打字稿编写的。
架构为:
var WaSchema = new mongoose.Schema({
ownerId: { type: 'String', required: true },
options: { type: 'String', required: false },
launch: [{ type : 'ObjectId', required: true }],
});
从 REST 接口中,我得到了一个字符串数组"lanch":launch: Array<string>
这是我目前保存的方式:
WaModel.findOneAndUpdate(query, {
ownerId: userId,
options: wa.options,
launch: wa.launch
},
{ upsert: true },
(err, doc) => {
if (err) throw err
else return 'successfully saved/updated';
})
REST 接口中的 ObjectId 必须如何才能正确转换?它只是像'575e52790c0fc76a11e381d0'这样的刺痛,还是需要像ObjectId("575e52790c0fc76a11e381d0")这样的前缀?
最后的阵列会是什么样子?这取决于#1的答案
我看到了填充功能,这在这里有帮助吗?
1)如果您使用的是猫鼬,则无需添加前缀ObjectId。您可以另存为引用 ID 数组。
var insertData = {
ownerId: userId,
options: wa.options,
launch: [ '56cea954d82cd11004ee67b5','56ceaa00d82cd11004ee67bc' ]
}
2)最后你的数组将看起来像这样。
"launch" : [
ObjectId("56cea954d82cd11004ee67b5"),
ObjectId("56ceaa00d82cd11004ee67bc")
],
3)是的,填充功能在这里会有所帮助。它将填充整个数组。填充后,它将看起来像
"launch" : [
{ _id: '56cea954d82cd11004ee67b5',
.... other fields
},
{ _id: '56ceaa00d82cd11004ee67bc',
.... other fields
},
]
说将对象 ID 存储在数据类型为 ObjectId
的数组中。因此,为此,您应该将'575e52790c0fc76a11e381d0'
的字符串格式的id转换为类型ObjectId
。
使用以下命令进行转换:
考虑 id 是 a user (userId)
var stringUserId = '575e52790c0fc76a11e381d0';
var ObjectId = mongoose.Types.ObjectId;
var userId = ObjectId(stringUserId); //This should assign a value of datatype ObjectId to userId