相关疑难解决方法(0)

在Mongoose中填充后查询

我对Mongoose和MongoDB很新,所以我很难搞清楚这样的事情是否可行:

Item = new Schema({
    id: Schema.ObjectId,
    dateCreated: { type: Date, default: Date.now },
    title: { type: String, default: 'No Title' },
    description: { type: String, default: 'No Description' },
    tags: [ { type: Schema.ObjectId, ref: 'ItemTag' }]
});

ItemTag = new Schema({
    id: Schema.ObjectId,
    tagId: { type: Schema.ObjectId, ref: 'Tag' },
    tagName: { type: String }
});



var query = Models.Item.find({});

query
    .desc('dateCreated')
    .populate('tags')
    .where('tags.tagName').in(['funny', 'politics'])
    .run(function(err, docs){
       // docs is always empty
    });
Run Code Online (Sandbox Code Playgroud)

这有更好的方法吗?

编辑

为任何困惑道歉.我要做的是获取包含有趣标签或政治标签的所有项目.

编辑

没有where子句的文件: …

mongoose mongodb node.js

66
推荐指数
4
解决办法
5万
查看次数

聚合$ lookup匹配管道中文档的总大小超过最大文档大小

我有一个非常简单的$lookup聚合查询,如下所示:

{'$lookup':
 {'from': 'edge',
  'localField': 'gid',
  'foreignField': 'to',
  'as': 'from'}}
Run Code Online (Sandbox Code Playgroud)

当我在匹配足够的文档时运行它时,我收到以下错误:

Command failed with error 4568: 'Total size of documents in edge
matching { $match: { $and: [ { from: { $eq: "geneDatabase:hugo" }
}, {} ] } } exceeds maximum document size' on server
Run Code Online (Sandbox Code Playgroud)

所有限制文件数量的尝试都失败了.allowDiskUse: true什么也没做.发送输入cursor无效.添加$limit到聚合中也会失败.

怎么会这样?

然后我再次看到错误.哪里是$match和$and与$eq从何而来?幕后的聚合管道是否会$lookup调用另一个聚合,一个是自己运行的聚合管道,我无法为游标提供限制或使用游标.

这里发生了什么?

mongodb aggregation-framework

14
推荐指数
2
解决办法
8410
查看次数

在mongodb中实现分页

我知道使用它skip来实现分页是一种不好的做法,因为当数据变大skip时会开始消耗大量内存.解决这个问题的一种方法是按_id字段使用自然顺序:

//Page 1
db.users.find().limit(pageSize);
//Find the id of the last document in this page
last_id = ...

//Page 2
users = db.users.find({'_id'> last_id}). limit(10);
Run Code Online (Sandbox Code Playgroud)

问题是 - 我是mongo的新手,不知道最好的方法是什么 last_id

javascript pagination mongodb mongodb-query

8
推荐指数
1
解决办法
4159
查看次数