我正在使用 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/