【问题标题】:How to insert document into a collection with only one ObjectID using Mongoose?如何使用 Mongoose 将文档插入只有一个 ObjectID 的集合中?
【发布时间】:2015-05-30 12:43:57
【问题描述】:

我有一个 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,但我不能将它用于由 mongoose 在 C 中插入的不必要的 ID,因为这样可以消除两者都是 ObjectID。
那么有人可以帮助我如何做到这一点吗?
另一件事是我不知道 "__V": 0 从哪里进入收藏?

【问题讨论】:

    标签: json node.js mongodb express mongoose


    【解决方案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] ....
    ...)};
    

    然后尝试插入新文档。

    【讨论】:

      【解决方案2】:

      也可以通过在Schema的C元素中添加_id : false来实现:

      var UserSchema   = new Schema({
          C : [
              {
                  D : Schema.Types.ObjectId,
                  E : String,
                  _id : false
              }
          ]
      });
      

      当您有多个使用相同子结构的架构时,子架构会为您提供帮助,但这里我只有一个架构,因此使用子架构并不好。

      【讨论】:

        猜你喜欢
        • 2020-12-26
        • 2012-11-04
        • 2016-09-22
        • 2016-11-07
        • 2011-09-01
        • 2016-02-22
        • 2022-01-13
        • 2018-05-05
        • 2014-08-16
        相关资源
        最近更新 更多