我的模型看起来像这样
var mongoose = require('mongoose');
var tableSchema = new mongoose.Schema({
version: { type: String, uppercase: true , required: true, trim: true },
name: { type: String, uppercase: true , required: true, trim: true },
descr: String
});
uctableSchema.index({ version: 1, name: 1 }, { unique: true });
module.exports = mongoose.model('Table', tableSchema);
此模型将生成这样的集合
> db.tables.findOne()
{
"_id" : ObjectId("56fc97d6e81ed6faf5e75b58"),
"version" : "4",
"name" : "address",
"descr" : "contact address table"
}
一切都很好。我故意离开mongoose来生成auto _id。
我创建了一个独特的复合索引作为主键。
数据实际上是通过json文件从RDBMS导入的。所以mongoimport会为它自动生成_id。这很好。
_id值没有实际意义,我想通过复合主键检索,修改和删除数据。
在我的情况下,我还可以使用findById吗?
Model.findById(id, [projection], [options], [callback])
Model.findByIdAndUpdate(id, [update], [options], [callback])
Model.findByIdAndRemove(id, [options], [callback])
我知道第一个参数id指的是我不想使用的_id。
有没有办法让id参数引用我的复合键,版本和名称?或者在我的情况下我根本不应该使用findById?
谢谢,
答案 0 :(得分:2)
不,xxxById方法都只能用于_id
。
例如,这是findById
的来源:
Model.findById = function findById(id, projection, options, callback) {
if (typeof id === 'undefined') {
id = null;
}
return this.findOne({_id: id}, projection, options, callback);
};
您需要使用更通用的findOne
,findOneAndUpdate
和findOneAndRemove
方法。