arrays - 如何从 Mongoose 数组中获取数据?

标签 arrays node.js mongodb mongoose

我是 mongoose node.js 和 mongoDB 的新手,我有一个类似于

的数据库架构
Project:{
    projectName:"String",
    projectManager:"String",
    task:[{
           taskName:"String",
           timetakeninhrs:"String"
    }]
};

所以我想要的是仅获取具有特定任务名称的任务的详细信息。 我正在编写 sql 脚本,以便您知道我想要什么:

Select taskname,timetakeninhrs from project where taskName ='DB create';

最佳答案

$elemMatch 投影运算符会派上用场:

Project
    .where('task.taskName', 'DB create') // or where('task.taskName').equals('DB create').
    .select({_id: 0, task: {$elemMatch: {'taskName': 'DB create'}})
    .exec(function(err, docs){
        var tasks = docs.map(function(doc){ return doc.task[0]; });
        console.log(tasks[0].taskName); // 'DB create'
        console.log(tasks[0].timetakeninhrs); // '3'
    });

在上面,where() 方法充当 Mongoose 模型的静态辅助方法,它使用链接语法构建查询,而不是指定 JSON 对象。所以

// instead of writing:
Project.find({ 'task.taskName': 'DB create' }, callback);

// you can instead write:
Project.where('task.taskName', 'DB create');

// or
Project.where('task.taskName').equals('DB create');

然后链接 select() 方法使用 $elemMatch 投影“任务”数组字段。在 exec() 方法(异步执行查询),您需要传入遵循模式 callback(error, results) 的回调。结果是什么取决于操作:对于findOne(),它是一个可能为空的单个文档,find() 文档列表,count() 文档数量,update() 文档数量受影响等。在这种情况下,这将返回格式为的文档数组:

[
    /* 0 */
    {
        "task" : [ 
            {
                "taskName" : "DB create",
                "timetakeninhrs" : "3"
            }
        ]
    },
    /* 1 */
    {
        "task" : [ 
            {
                "taskName" : "DB create",
                "timetakeninhrs" : "9"
            }
        ]
    }
    /* etc */
]

在回调中,您可以执行一些数据操作来获取仅具有您指定的属性的对象,因此使用 native JavaScript map() 函数用这些字段创建一个新的对象数组

关于arrays - 如何从 Mongoose 数组中获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33274927/

相关文章:

python - 如何向 numpy 数组添加名称而不更改其维度?

node.js - Socket.io 0.9.x 文档在哪里?

node.js - 事件.js :85//Unhandled error event

node.js - Bower 的麻烦 - Node.js

mysql - 使用哪个数据库来存储键值(数组)对

node.js - 防止 NoSQL 注入(inject) : Isn't mongoose supposed to convert inputs based on given schema?

python - 去除 Python 中数组列表中的空数组和零数组

java - 删除数组中的最后一个空格 - java

arrays - 如何根据 Aurelia/Typescript 中的嵌套属性对对象数组进行排序

python - Pymongo返回没有_id的数据