javascript - 如何通过mongoose在mongodb中设置复合主键

标签 javascript node.js mongodb mongoose

我想通过mongoosemongodb中集合中的两个字段设置主键。我知道将 mongodb 中的复合主键设置为

db.yourcollection.ensureIndex( { fieldname1: 1, fieldname2: 1 }, { unique: true } )

但是我使用mongoose来处理mongodb我不知道如何从mongoose设置复合主键

更新

我使用了mySchema.index({ ColorScaleID: 1, UserName: 1}, { unique: true }); 看我的代码

var mongoose = require('mongoose')

var uristring ='mongodb://localhost/fresh';
var mongoOptions = { db: { safe: true } };

// Connect to Database
mongoose.connect(uristring, mongoOptions, function (err, res) {
    if (err) {
        console.log ('ERROR connecting to: remote' + uristring + '. ' + err);
    } else {
        console.log ('Successfully connected to: remote' + uristring);
    }
});
var mySchema = mongoose.Schema({
        ColorScaleID:String,
        UserName:String,
        Range1:Number,
    })
mySchema.index({ ColorScaleID: 1, UserName: 1}, { unique: true });
var freshtime= mongoose.model("FreshTimeColorScaleInfo",mySchema)
var myVar = new freshtime({
        ColorScaleID:'red',
        UserName:'tab',
        Range1:10
    })
myVar.save()
mongoose.connection.close();

当我第一次执行此代码时,我在 mongodb 的新数据库中看到一行 {"_id":...,ColorScaleID:'red',UserName:'tab',Range1:10 } 。当我第二次执行相同的代码时,我看到两行相同的行。

{"_id":...,ColorScaleID:'red',UserName:'tab',Range1:10 }
{"_id":...,ColorScaleID:'red',UserName:'tab',Range1:10 }

如果复合主键有效,那么它不应该允许我第二次插入相同的数据。会出现什么问题?

最佳答案

您定义架构的方式是正确的并且可以工作。您可能遇到的情况是数据库已经创建,并且该集合可能已经存在,即使它可能是空的。 Mongoose 不会更新索引。

作为实验,将数据库设置为不存在的数据库。例如:

var uristring ='mongodb://localhost/randomname';

然后尝试针对该数据库运行这两行,看看是否仍然可以插入这两个文档。

然后比较每个集合中“system.indexes”集合的内容。您应该看到 randomname 数据库已正确设置复合索引。

关于javascript - 如何通过mongoose在mongodb中设置复合主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22987728/

相关文章:

php - PHP MongoDB 查询中 "and"内的 "or"

javascript - 我如何以另一个函数的路径运行Audio.play,就像它们在同一个函数中一样快?

javascript - 具体悬停任务

javascript - 使用 JQuery 更改动态生成的标签的属性

尝试 http 请求时 Node.js "callback not defined"

node.js - 从 node.js 脚本禁用 sudo/root 权限

javascript - 将表单传递给 Controller

node.js - Feathersjs 与 Express JS

java - spring data mongodb 支持手动引用还是仅支持 DBrefs?

node.js - AngularJS 更新 mongoDB