我有一个mongoDB,我想拥有以下架构:
directory: {
"file1": "id",
"directory1":{
"file1": "..."
"file2": "..."
"file3": "..."
"direcrtory1": {}
}
}
我的问题是:如何选择函数$ push的字段名作为以下函数的参数?
function createFile(projectId,filename,id){
return Project.updateOne({projectId:projectId},{$push:{directory:{filename: id}}});
}
上面的代码在数据库中创建了这个:
"directory": [
{
"id": "someID",
"filename": "something"
}
现在,我不想要'文件名'这样命名。我希望它被命名为通过函数
传输的值示例:if函数获取以下参数(someID,'',' anotherId ),在数据库中,我将拥有' filename':' anotherId',我想要的输出是:'':' anotherId&# 39; 。我怎么能得到它?
任何帮助将不胜感激
解决方案:
var update = {$set:{}};
update.$set[filename] = id;
Project.updateOne({projectId: projectId},update,{upsert: true});
答案 0 :(得分:0)
使用Mongoose Schema的目的是强制Mongo集合中对象的形状。它不会持久化不符合架构的字段。如果您希望每个存储对象具有与您描述的不同的字段,则需要直接使用MongoClient来保存纯JS对象,或者在架构中定义希望变量名称出现的混合类型。
如果您执行后者操作,请注意您必须在保存之前调用markModified()
以让Mongoose识别出发生的更改。
好的,所以为Mongoose添加一个例子。你只是做我说的话。
const DirectorySchema = new Schema({
path: String,
contents: Mixed
});
然后“内容”字段可以存储您想要的任何内容,但在根据该模式保存模型之前,您必须调用markModified
。