如何使用 Mongoose 将文档插入只有一个 ObjectID 的集合中?
Posted
技术标签:
【中文标题】如何使用 Mongoose 将文档插入只有一个 ObjectID 的集合中?【英文标题】:How to insert document into a collection with only one ObjectID using Mongoose? 【发布时间】: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 从哪里进入收藏?
【问题讨论】:
【参考方案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
]
);
当您有多个使用相同子结构的架构时,子架构会为您提供帮助,但这里我只有一个架构,因此使用子架构并不好。
【讨论】:
以上是关于如何使用 Mongoose 将文档插入只有一个 ObjectID 的集合中?的主要内容,如果未能解决你的问题,请参考以下文章