node.js - Nodejs Mongodb 使用 find 获取数组的第一个元素而不使用聚合

标签 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"

最佳答案

这是 the positional $ operator返回数组中的第一个元素。你的预测一定是这样的

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

关于node.js - Nodejs Mongodb 使用 find 获取数组的第一个元素而不使用聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52754087/

相关文章:

node.js - 带有集合和动态查询输出的 mongodb 查找

java - MongoDB 无法使用复杂对象作为键值 Java

node.js - mongodb 并在 node.js 中进行身份验证和通行证

javascript - 为什么我的异步函数不起作用?我只是想让它 console.log mongodb 查询的结果?

arrays - 仅当它是插入时如何推送数组元素

javascript - 在 memcached 中存储来自 node.js 的二进制 blob

javascript - 使用模块构建 Node.js 应用程序

node.js - 在 Mongoose pre hooks 中获取模型数量

node.js - 错误未处理的拒绝类型错误: Cannot read property 'internal' of undefined

JavaScript ES2017 : Nested async await in a class