node.js - 使用 ObjectId 键和字符串数组定义映射作为 mongoose 模式中的值

标签 node.js mongodb mongoose node-mongodb-native

我在为数据库创建 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/

相关文章:

c# - 条件聚合器的 MongoDb.Linq 等效查询

node.js - 如何正确使用函数 populate()

mongodb - 更新时获取文档的新旧版本

node.js - Mongoose update '不能使用部分(..)来遍历元素

node.js - 如何在 DELETE 调用后 X 时间后删除 mongodb(mongoose) 上的文档?

node.js - Node : Static imports possible?

jquery - 使用npm爬虫爬取Node.js错误

mongodb - 使用 gridfs、scala 和 playframework2 在 mongodb 上存储和检索图像的任何示例

javascript - 在 js 类的异步函数中调用函数

node.js - 从 passportjs 中的刷新 token 获取 oauth 访问 token