如何使用 Mongoose 将文档插入到只有一个 ObjectID 的 collection 中?
How to insert document into a collection with only one ObjectID using Mongoose?
我有一个 JSON,我想使用 Mongoose 将其存储在 collection 中。我用来将文档插入 collection 的函数是:
UserSchema.statics.SaveDocument=function(docs,callback){
docs=JSON.parse(docs);
this.create(docs,function(err,data){
if(err) callback(err);
else callback(data);
});
};
collection 的架构是:
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",
}
],
}
并且存储到 collection 中的文档看起来像:
{
"_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 32=] 因为这消除了 ObjectID .
那么有人可以帮助我如何做到这一点吗?
另一件事是我不知道 "__V": 0 从哪里进入 collection ?
对于 __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] ....
...)};
然后尝试插入新文档。
也可以通过在 Schema:
的元素 C 中添加 _id : false 来完成
var UserSchema = new Schema({
C : [
{
D : Schema.Types.ObjectId,
E : String,
_id : false
}
]
});
当您有多个模式使用相同的子结构时,子模式可以帮助您,但这里我只有一个模式,因此使用子模式感觉不太好。
我有一个 JSON,我想使用 Mongoose 将其存储在 collection 中。我用来将文档插入 collection 的函数是:
UserSchema.statics.SaveDocument=function(docs,callback){
docs=JSON.parse(docs);
this.create(docs,function(err,data){
if(err) callback(err);
else callback(data);
});
};
collection 的架构是:
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",
}
],
}
并且存储到 collection 中的文档看起来像:
{
"_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 32=] 因为这消除了 ObjectID .
那么有人可以帮助我如何做到这一点吗?
另一件事是我不知道 "__V": 0 从哪里进入 collection ?
对于 __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] ....
...)};
然后尝试插入新文档。
也可以通过在 Schema:
的元素 C 中添加 _id : false 来完成var UserSchema = new Schema({
C : [
{
D : Schema.Types.ObjectId,
E : String,
_id : false
}
]
});
当您有多个模式使用相同的子结构时,子模式可以帮助您,但这里我只有一个模式,因此使用子模式感觉不太好。