如何将字段名称更改为函数参数mongoDB

时间:2017-12-30 15:33:53

标签: node.js mongodb mongoose

我有一个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});

1 个答案:

答案 0 :(得分:0)

使用Mongoose Schema的目的是强制Mongo集合中对象的形状。它不会持久化不符合架构的字段。如果您希望每个存储对象具有与您描述的不同的字段,则需要直接使用MongoClient来保存纯JS对象,或者在架构中定义希望变量名称出现的混合类型。

如果您执行后者操作,请注意您必须在保存之前调用markModified()以让Mongoose识别出发生的更改。

好的,所以为Mongoose添加一个例子。你只是做我说的话。

  const DirectorySchema = new Schema({ 
             path: String,
             contents: Mixed 
   });

然后“内容”字段可以存储您想要的任何内容,但在根据该模式保存模型之前,您必须调用markModified