我在为数据库创建 Mongoose 架构时遇到问题。我想创建一个以 objectId 作为键、以字符串值数组作为值的映射。我能得到的最接近的是:
var schema = new Schema({
map: [{myId: {type:mongoose.Schema.Types.ObjectId, ref: 'MyOtherCollection'}, values: [String]}]
});
但不知怎的,这对我不起作用。当我使用 {upsert: true} 执行更新时,它没有正确填充 map 中的 key: value。事实上,我什至不确定我是否正确声明了架构。
谁能告诉我架构是否正确?另外,如何使用 {upsert: true} 对此架构执行更新?
此外,如果上述不正确并且无法实现,那么我如何通过其他方式来模拟我的需求。我的用例是我想保留给定 objectId 的值列表。我不希望任何具有相同键的重复条目,这就是选择 map 的原因。
请建议该方法是否正确,或者是否应该以其他方式建模?
更新:
基于@phillee和this的回答,我只是想知道我们可以修改上述 thread 的接受答案中提到的模式吗?像这样:
{
"_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
... // other fields
"myId" : {
"4f9519d6684c8b1c9e73e367" : ["a","b","c"],
"4f9519d6684c8b1c9e73e369" : ["a","b"]
}
}
架构将类似于:
var schema = new Schema({
myId: {String: [String]}
});
如果是,我如何相应地更改我的 { upsert:true } 条件?另外,就复杂性而言,与线程中提到的原始模式相比,它会更简单/复杂吗?
最佳答案
我建议更改架构,以便每个 myId 有一个条目,
var schema = new Schema({
myId : {type:mongoose.Schema.Types.ObjectId, ref: 'MyOtherCollection'},
values : [String]
})
如果您想更新/更新插入值,
Model.update({ myId : myId }, { $set : { values : newValues } }, { upsert : true })
关于node.js - 使用 ObjectId 键和字符串数组定义映射作为 mongoose 模式中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32038606/