Nodejs Mongodb使用find而不使用聚合来获取数组的第一个元素

时间:2018-10-11 06:58:37

标签: node.js mongodb

我正在使用Mongodb NodeJs驱动程序在数据库中查找值。我的收藏的对象结构是:

{
    '_id': ObjectId(),
    'name': ''
    'myList': []
}

我需要过滤在数组中至少有一个元素的文档,并返回包括列表和该列表的第一个元素(在单独的属性中)的值。我想知道是否可以在不使用聚合的情况下执行此操作,但是我无法返回列表的第一个元素。

我找到值的代码是:

let dbClient = await MongoClient.connect(myDbUrl, {useNewUrlParser: true});
let database = dbClient.db(myDatabase);

let query = {
    myList: {$exists: true, $not: {$size: 0}},
};

let options = {
    projection: {

    }
}

let result = await database.collection(myCollection).find(query, options).toArray();

dbClient.close();

我省略了与情况无关的try catch语句。

到目前为止,我已经尝试过(没有成功):

let options = {
   projection: {
        'myList.0': 1
    }
}

let options = {
   projection: {
        '$myList.0': 1
    }
}

let options = {
   projection: {
        firstElement: { 'myList.0': 1 }
    }
}

let options = {
    projection: {
        firstElement: {$arrayElemAt: ['$myList', 0]},
    }
}

let options = {
    $project: {firstElement: {$arrayElemAt: ['$myList', 0]}},
}

这些错误基本上是由于不支持该功能。

我知道使用聚合可以将其添加到查询管道中以获得所需的投影:

{$project: {firstElement: {$arrayElemAt: ['$myList', 0]}}},

是否可以使用find来获取该值,还是只能使用aggregate来获取该值?

版本:

"mongodb": "3.1.6"

1 个答案:

答案 0 :(得分:1)

/feed documentation page返回数组中的第一个元素。您的预测必须类似于

CALCULATE