gpt4 book ai didi

javascript - MongoDB 返回未定义

转载 作者:太空宇宙 更新时间:2023-11-04 00:29:14 25 4
gpt4 key购买 nike

我有一个简单的程序,它存储在名为坐标的集合中的MongoDB 3个变量 - XYMESSAGE 中。现在我需要从那里查找并使用 10 个最新条目。我发现我可以用 collection.find({}).skip(collection.count() - 10) 做到这一点然后将其转换为数组 .toArray() 。我的完整代码行如下所示

var notesArray=collection.find({}).skip(collection.count() - 10).toArray;
if (notesArray.length > 0) { console.log(notesArray[0]); }

并在控制台中显示“未定义”。我需要做的是获取 X 数组、 Y 数组和 MESSAGE 数组,它们都包含 10 个最新条目?稍后我需要在其他函数中使用这些 10 x,y 和消息。预先感谢您。

编辑:

放入collection.find().limit(3).toArray(function(err, docs) { console.log(docs); })后进入代码,我从数据库中获取了 3 条第一条记录,如下所示

[ { _id: 5878f25df5cfe2d8002fdc72, x: 450, y: 265, message: 'QQQQQQQQQQQQQQQQQQQQQQQq' },

{ _id: 5878f263f5cfe2d8002fdc73, x: 1146, y: 245, message: 'QQQQQQQQQQQQQQQQQQQQQQQq' },

{ _id: 5878f267f5cfe2d8002fdc74, x: 216, y: 175, message: 'QQQQQQQQQQQQQQQQQQQQQQQq QQQQ' } ]

我想我需要这样做collection.find().skip(collection.count() - 10).toArray(function(err, docs) { console.log(docs); })但后来我收到错误 TypeError: callback is not a function

编辑2:

通过将大写字母更改为小写,一切都得到了修复。

最佳答案

您可以使用聚合框架来获得所需的结果。以下示例演示了如何运行 aggregate() Nodejs 中的管道:

// Correctly call the aggregation framework using a pipeline in an Array.
var MongoClient = require('mongodb').MongoClient;

MongoClient.connect('mongodb://localhost:27017/test', function(err, db) {
// Create a collection
var collection = db.collection('coordinates');

// Execute aggregate, notice the pipeline is expressed as an Array
collection.aggregate([
{ "$sort": { "_id": -1 } },
{ "$limit": 10 },
{
"$group": {
"_id": null,
"x": { "$push": "$x" },
"y": { "$push": "$y" },
"message": { "$push": "$message" }
}
}
], function(err, notesArray) {
console.log('X: ', notesArray[0].x);
console.log('Y: ', notesArray[0].y);
console.log('MESSAGE: ', notesArray[0].message);

var firstX = notesArray[0].x[0];
console.log(firstX);

console.log(notesArray);
db.close();
});
});
<小时/>

上述聚合操作首先使用 $sort_id 字段对集合中的文档进行排序。 管道运营商。由于对存储 ObjectId_id 字段进行排序 值大致相当于按创建时间排序,您如果MongoDB驱动程序自动生成ObjectId,则能够获取最新文档 用于文档创建时的 _id 字段。否则,如果 _id 不是 ObjectId ,您需要对表示的时间戳字段进行排序创建文档的日期时间,以确定查询中的最后 n 个文档。

下一步需要从排序列表中选择前 10 个文档。这是通过 $limit 实现的。 运算符。

最后,您将所有文档分组并通过 $group为每个字段创建数据列表。 管道。 $push 累加器运算符可以从指定字段上的组中创建值数组。 $group 中的 _id 字段阶段是强制性的;但是,您可以指定 _id 值为 null 来计算所有输入文档的累计值,如上所述。

最终结果将是一个只有一个文档的数组,该文档的 _idnull 和三个字段,即一个 X 数组code>、Y 数组和 MESSAGE 数组,所有这些都包含 10 个最新条目:

notesArray = [
{
"_id": null,
"X": [/* last 10 x values */],
"Y": [/* last 10 y values */],
"MESSAGE": [/* last 10 MESSAGE values */]
}
]

关于javascript - MongoDB 返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41638499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com