文档大小意味着“发生了parseError”?

时间:2015-08-07 12:05:11

标签: node.js mongodb

所以我有一个类似的集合:

{
 date:"20150730",
 store:"X",
 catalogue : [{...}, ..., {...}] // ~3000 items
},
{
 date:"20150807",
 store:"X",
 catalogue : [{...}, ..., {...}] // ~3000 items
},
{
 date:"20150807",
 store:"Y",
 catalogue : [{...}, ..., {...}] // ~25000 items
}

我打算做的查询是:

collection.findOne({store:_store},{"sort":{'date':-1}}, function(err,doc){
    doc && console.log(doc);
    err && console.log(err);
});

我想将其翻译为“让我收到_store的最新文档”(第一个问题是我是对的吗?

然后,如果我在商店X上尝试查询,它可以很好地工作但是在商店Y上,它会引发我:

[Error: parseError occured]

更多信息:

Object.bsonsize(db.ZeCollection.findOne({store:"X"}))

- > 845994

Object.bsonsize(db.ZeCollection.findOne({store:"Y"}))

- > 7351092

所有文件都是有效的JSON

node.js的Mongodb包装器为mongojs(npm install mongojs)

您对此问题有任何疑问吗?

3 个答案:

答案 0 :(得分:1)

这确实是一个mongojs问题。

Mongojs在检索大数据时关闭连接池。

但好消息:Mongojs解决了这个问题。

所以我只需做npm update mongojs,现在一切正常。

谢谢大家。

答案 1 :(得分:0)

我认为应该如此(使用Mongoose),查看sortexec

collection.findOne({store:_store}).sort({'date':-1}).exec(function (err, doc) {
    //Do something
});

<强>更新

所以,在mongojs你的代码错了,你应该改为:

collection.findOne({store: _store}).sort({'date':-1}, function (err, doc) {
    //Do something
});

如上所述:https://github.com/mafintosh/mongojs#usage

答案 2 :(得分:0)

在mongodb中,您将使用以下查询来恢复商店XXXX的最后日期:

db.collection('collection').group({
  "key": {"store": true},
  "initial": {},
  "reduce": function(obj, prev){
    prev.max_date = isNaN(prev.max_date) ? obj.date : Math.max(prev.max_date, obj.date);
  },
  "cond": {"store":"XXXXXX"}
  }
)

然后,您可以恢复所需的任何内容,因为您已拥有商店和最后日期。 在mongojs中,语法为:

var mongojs = require('mongojs');
var db = mongojs('X.X.X.X/database');

db.collection('collection').group({
  "key": {"store": true},
  "initial": {},
  "reduce": function(obj, prev){
   prev.max_date = isNaN(prev.max_date) ? obj.date : Math.max(prev.max_date, obj.date);},
  "cond": {"store":"XXXXXX"}
  },
  function (err, docs) {
    console.log(docs);
  }
)