- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个mongodb/mongoskin聚合请求如下:
db.collection(customerTable + '_earnedinfluencers').aggregate([
{
$group: {
_id: '$user',
name: '', // to be filled separately
username: '', // to be filled separately
picture: '', // to be filled separately
city: '', // to be filled separately
kids: { $sum: '$kids' },
revenue: { $sum: '$dayIncome' },
kidsRevRatio: { $divide: [ { $sum: '$kids' }, { $sum: '$dayIncome' } ] }
},
$match: {
richness: { $gte: variable1 },
kids: { $lt: variable2 },
hobbies: { $in: ['hobby1', 'hobby2', 'hobby3', 'hobby4'] },
event: { $in: schoolfestival },
event: { $ne: 0 }
},
$project: {
_id: 0,
user: '$_id',
name: 1,
username: 1,
picture: 1,
city: 1,
kids: 1,
revenue: 1,
kidsRevRatio: 1
}
}
], function(err, result) {
// do something with err and result
});
以上代码报错如下:
Error: {"name":"MongoError","errmsg":"exception: A pipeline stage specification object must contain exactly one field.","code":16435,"ok":0}
总的来说,我是 mongo 和 db 的新手,不知道我做错了什么。
最佳答案
您的管道参数不平衡,每个阶段都是一个单独的文档,因此您需要包装每个阶段。但也存在一些其他问题
db.collection(customerTable + '_earnedinfluencers').aggregate([
{ $match: {
richness: { $gte: variable1 },
kids: { $lt: variable2 },
hobbies: { $in: ['hobby1', 'hobby2', 'hobby3', 'hobby4'] },
event: { $in: schoolfestival },
}},
{ $group: {
_id: '$user',
name: { '$first': '$name' },
username: { '$first': '$username' },
picture: { '$first': '$picture' },
city: { '$first': '$city' }
kids: { '$sum': '$kids' },
revenue: { '$sum': '$dayIncome' },
kidsSum: { '$sum': '$kids' },
}},
{ $project: {
_id: 0,
user: '$_id',
name: 1,
username: 1,
picture: 1,
city: 1,
revenue: 1,
kidsSum: 1,
kidsRevRatio: { $divide: [ '$kidsSum', '$revenue' ] }
}}
], function(err, result) {
// do something with err and result
});
您将整个管道作为一个文档,而实际上它需要如图所示的一系列文档。
但实际上您想要先$match
以过滤您的结果。如果您真的想在一组之后进行一些额外的匹配,那么您可以在之后向管道中添加一个额外的匹配。
$group
操作要求 _id
分组键之外的所有字段都需要有一个“分组运算符”,你不能只得到字段由它们自己返回,除非它们是您分组的 _id
的一部分。通常您需要一个运算符,例如 $first
或以其他方式完全忽略它们。
仅限顶级分组运算符,因此像 $divide
这样的操作不是分组运算符。为了在您处理一个或多个 $sum
结果时执行此类操作,您将其移至稍后的 $project
使用具有计算值的字段。
还有像项目和组这样的操作,从管道中“删除”字段,只保留您明确包含的字段。所以你不能指定一个不存在的字段。这就是为什么 $match
排在第一位的原因之一,也是您可以使用索引的地方,而且只有在管道的开头才能这样做。
但是对于每个阶段,唯一存在的字段将是提到的字段。作为进一步的优化,“优化器”将从一开始就不会包含文档中未明确提及的任何字段。因此,只有在第一场比赛和小组赛阶段合并引用的那些才会包含在其余的管道阶段中,然后可能会再次过滤掉。
关于javascript - 这个 mongoskin 聚合命令有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25373372/
我正在寻找一种从 mongoskin 查找功能中获取特殊字段的方法。换句话说,在 SQL 语言中我们说 select column1,column2,column3 from mytable 而不是
使用 Mongoskin,我想检查 MongoDB 集合中是否存在文档,其中每个文档都有一个唯一的键和一个数组作为其值。此代码完美运行: db.collection('buyerRec').find(
有没有办法使用 SOAjs 在 Mongoskin 中实现架构? 我想用其引用 ObjectID 填充文档。 最佳答案 SOAJS 目前仅与 mongoskin 驱动程序集成。与 mangoose 不
我正在通过身份验证连接到 mongodb 数据库 mongoskin ,并且知道您可以像这样指定数据库用户: [*://][用户名:密码@]主机[:端口][/数据库][?auto_reconnect[
我在使用 Mongoskin 在 Node 上执行批量插入 (MongoDB 2.6+) 时遇到问题。 var dbURI = urigoeshere; var db = mongo.db(dbURI
我正在使用 Mongodb 和 Mongoskin。我有以下数据结构: clients: { firstArray: [ { _id: '153'. someFie
我有一个包含具有以下结构的国家/地区的数组: { "code": "ZW", "name": "Zimbabwe", "zipPattern": "[\\s\\S]*",
我收到此错误消息: ======================================================================================== =
我有一个mongodb/mongoskin聚合请求如下: db.collection(customerTable + '_earnedinfluencers').aggregate([ {
我正在使用 mongoskin npm 模块连接到我的 mongo 数据库副本集群。我尝试了所有可能的方法,但是我的 Nodejs 代码无法建立连接。我可以使用独立连接来连接相同的主数据库,但是当我尝
使用nodejs,mongoskin..我想返回更新的文档,所以我使用findAndModify,但是查询{_id:“someid”}不起作用。我想我需要使用 {id: ObjectID{'somei
通过查看 mongodb 示例,我尝试了一些操作,例如: // returns an empty array funnyPosts.find({limit:5}).toArray(function(e
有没有办法在集合或数据库级别定义 mongoskin 中的读取首选项,这是来自 mongodb native Nodejs 驱动程序的示例 http://learnmongodbthehardway.
目标是使用 mongoskin 获取数据库中所有集合的列表。 我知道您可以在 mongo shell 中输入 db.getCollectionNames() 方法来执行此操作,但我还没有找到在我的应用
我已经建立了数据库连接。我需要列出数据库中集合的名称。可能吗? 最佳答案 db.collectionNames(function(err, collectionArrayResult) { /
我想用 mongoskin 运行以下查询,但似乎不支持聚合 mongodb查询 db.users.aggregate({ $match : { _id : Ob
我试图在进行 mongodb 查询时避免使用回调。我正在使用 mongoskin 来调用电话: req.db.collection('users').find().toArray(function (
我是全栈 javascript 的新手,并且已经被这个错误困扰了一段时间。起初,我在运行“npm-install”时看到了这个: npm WARN EPEERINVALID mongoskin@1.4
我试图迭代一个集合来创建一个目录并将其显示给用户槽jade,但每次运行时tableContent都是“无订单”,即使我认为我已经正确设置了数据库。 “listing.js”用于迭代数据库集合并将其发送
我已经阅读了很多关于如何链接异步函数的文章,但我似乎无法正确理解! 如标题所示。我正在尝试将 mongoskin 数据库调用链接在一起,以便我可以分块收集所有信息,然后最终在响应中发送累积结果。 我的
我是一名优秀的程序员,十分优秀!