我试图了解mapReduce函数,并根据stackoverflow上的此问题 ,使用它按与提供的ID数组相同的顺序对响应进行排序。 当我尝试通过提供书名数组来提取书籍时,一切工作正常,但是使用id数组则行不通。 我尝试将id转换为ObjectId,但仍然没有希望。 以下是书籍的数据模型。

 const mongoose = require('mongoose'); const BookSchema = mongoose.Schema({ title: { type: 'string', required: true }, author: { type: 'string' }, coverUrl: { type: 'string', required: true }, owner: { type: 'string', required: true }, description: { type: 'string' } }); let Book = module.exports = mongoose.model('Book', BookSchema); 

提取数据的代码是

 // booksIds is an array with only two ids which are strings. // three arguments passed to callback (err, docs, stats) Book.getBooksByIdsWithOrder = function (booksIds, callback) { // let book_titles = ["The History of Street Art", "A Night In The Woods"]; booksIds[0] = mongoose.Types.ObjectId(booksIds[0]); booksIds[1] = mongoose.Types.ObjectId(booksIds[1]); let ask = {} ask.map = function () { var order = inputs.indexOf(this._id); emit( order, { doc: this } ); }; ask.out = {"inline": 1}; ask.query = { "_id": {"$in": booksIds}}; ask.scope = {"inputs": booksIds}; ask.finalize = function (key, value) { return value.doc; } Book.mapReduce(ask, callback); }; 

错误!

 { MongoError: TypeError: value is null : @:2:5 at Function.MongoError.create (/home/user/web_development/bookTradingClub/backend/node_modules/mongodb-core/lib/error.js:31:11) at /home/user/web_development/bookTradingClub/backend/node_modules/mongodb-core/lib/connection/pool.js:497:72 at authenticateStragglers (/home/user/web_development/bookTradingClub/backend/node_modules/mongodb-core/lib/connection/pool.js:443:16) at Connection.messageHandler (/home/user/web_development/bookTradingClub/backend/node_modules/mongodb-core/lib/connection/pool.js:477:5) at Socket.<anonymous> (/home/user/web_development/bookTradingClub/backend/node_modules/mongodb-core/lib/connection/connection.js:331:22) at emitOne (events.js:96:13) at Socket.emit (events.js:188:7) at readableAddChunk (_stream_readable.js:176:18) at Socket.Readable.push (_stream_readable.js:134:10) at TCP.onread (net.js:547:20) name: 'MongoError', message: 'TypeError: value is null :\\n@:2:5\\n', ok: 0, errmsg: 'TypeError: value is null :\\n@:2:5\\n', code: 139, codeName: 'JSInterpreterFailure' } 

  ask by zaheer translate from so

本文未有回复,本站智能推荐:

2回复

按日期分组范围mongodb

我在数据库中有这个集合 我想获取一个开始日期列表,并在该开始日期范围内计算平均值,例如,此集合的结果将是: 我尝试了一些map-reduce和分组,但是没有一个可以按开始日期正确分组,请帮忙。
11回复

MongoDB的$in子句是否保证顺序

使用 MongoDB 的$in子句时,返回文档的顺序是否始终与数组参数的顺序相对应?
2回复

通过mapreduce的MongoDB唯一值聚合

我在MongoDB中看到很多关于聚合的问题,但是,我还没有找到完整的解决方案。 这是我的数据示例: { "fruits" : { "apple" : "red", "orange" : "orange", "plum" : "purple"
1回复

mongoDB-MapReduce完成创建NaN值

我为以下数据结构创建了MapReduce作业: 我想按学期分组,然后计算平均分数。 这是我的MapReduce函数: 一些计算值是正确的: 但是其他人正在创建一些奇怪的结构: 我的MapReduce函数出了什么问题?
1回复

Mongodb分组数据-mapReduce还是聚合?

我有这样的文件: 我希望用户将subscribed标志设置为true的项目列表分组。 例如,我期待的是: 我将有一个cron作业,它将订阅项目的相应详细信息发送到相应的邮件ID。 我尝试了聚合,但聚合需要指定密钥。 在我的情况下,键(Project1,Project2等)是动态
3回复

如何分组mongodb-mapReduce输出?

我有关于mongodb中的mapReduce框架的查询,所以我有mapReduce函数的键值对的结果,现在我想在mapReduce的这个输出上运行查询。 所以我使用mapReduce来查找这样的用户统计信息 这给了我这样的输出 现在我想运行查询并根据不同类别的计数对用户进行分组,例如
1回复

使用DBCollection.mapReduce更改MongoDB模式:虚假嵌套的“值”属性

我需要创建一个数据库补丁,将MongoDB集合的所有元素更新为新格式。 例如,经过严格简化,旧格式的文档如下: 新格式需要这样的文档: 我使用的是MongoDB的Java API,并且数据库修补程序也必须用Java编写,但是我发现可以利用DBCollection.mapReduce()
1回复

MongoDB聚合比较:group(),$group和MapReduce

关于何时使用group(),与$ group或mapreduce聚合,我有点困惑。 我在http://www.mongodb.org/display/DOCS/Aggregation上阅读了针对group()的文档, http: //docs.mongodb.org/manual/refere