所以我有一个类似的集合:
{
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)
您对此问题有任何疑问吗?
答案 0 :(得分:1)
这确实是一个mongojs问题。
Mongojs在检索大数据时关闭连接池。
但好消息:Mongojs解决了这个问题。
所以我只需做npm update mongojs
,现在一切正常。
谢谢大家。
答案 1 :(得分:0)
我认为应该如此(使用Mongoose),查看sort
和exec
:
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
});
答案 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);
}
)