如何使用Mongoose将文档插入只有一个ObjectID的集合中?

时间:2015-03-26 13:18:21

标签: json node.js mongodb express mongoose

我有一个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 进入收藏?

2 个答案:

答案 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
        }
    ]
});

当你有多个使用相同子结构的模式时,子模式可以帮助你,但是在这里我只有一个模式,所以使用子模式感觉不好。