我有一个JSON,我希望使用Mongoose存储在集合中。我用来将文档插入集合的函数是:
UserSchema.statics.SaveDocument=function(docs,callback){
docs=JSON.parse(docs);
this.create(docs,function(err,data){
if(err) callback(err);
else callback(data);
});
};
该集合的架构是:
var UserSchema = new Schema({
A : String,
B : String,
C : [
{
D : Schema.Types.ObjectId,
E : String,
}
]
});
我想要存储的JSON格式如下:
{
"A" : "something",
"B" : "something",
"C" : [
{
"D" : "something",
"E" : "Something",
}
],
}
并且存储到集合中的文档如下所示:
{
"_id" : ObjectId("55XXXXX"),
"A" : "something",
"B" : "something",
"C" : [
{
"D" : "something",
"E" : "Something",
"_id" : ObjectId("56XXXXX"),
}
],
"__v" : 0
}
现在,我想要的是存储由我的函数生成的ObjectId,而不是存储mongoose在元素 C 的数组中插入的额外ObjectID。
我知道通过在函数中使用 {id:false} ,我可以禁用自动生成的ID,但我无法将其用于由 C 中的mongoose插入的不必要的ID,因为这消除了两个ObjectID。
那么有人可以帮助我如何做到这一点吗?
另一件事是我没有任何想法来自“__ V”:0 进入收藏?
答案 0 :(得分:1)
对于__V部分:您可以通过附加{ versionKey: false }
来停用它,请参阅:http://mongoosejs.com/docs/guide.html#versionKey
要删除 C 中的_id,您可以定义类似
的子模式var C = mongoose.Schema({
//C schema content
},{ _id : false });
并将原始架构更改为:
var UserSchema = new Schema({
A : String,
B : String,
C : [subSchema] ....
...)};
然后尝试插入新文档。
答案 1 :(得分:1)
也可以通过在Schema的元素 C 中添加 _id:false 来完成:
var UserSchema = new Schema({
C : [
{
D : Schema.Types.ObjectId,
E : String,
_id : false
}
]
});
当你有多个使用相同子结构的模式时,子模式可以帮助你,但是在这里我只有一个模式,所以使用子模式感觉不好。