我有一个包含两个文档的测试集合:
> db.test.find().pretty()
{ "_id" : ObjectId("510114b46c1a3a0f6e5dd7aa"), "a" : 1, "b" : 2 }
{ "_id" : ObjectId("510114c86c1a3a0f6e5dd7ab"), "a" : 3, "b" : 1 }
Run Code Online (Sandbox Code Playgroud)
使用聚合框架,我想只获取a大于b的文档.$ gt只获取参数中的值而不是字段...
> db.test.aggregate([{"$match":{"$a":{"$gt":"$b"}}}])
{ "result" : [ ], "ok" : 1 } /* don't work*/
Run Code Online (Sandbox Code Playgroud)
你有什么想法吗?
提前致谢
最好的祝福
我match-unwind-group-sort在mongo 2.4.4中有一个聚合管道,我需要加快聚合.
匹配操作包含16个字段的范围查询.我已经使用该.explain()方法来优化范围查询(即创建复合索引).是否有类似的功能来优化聚合?我正在寻找类似的东西:
db.col.aggregate([]).explain()
Run Code Online (Sandbox Code Playgroud)
另外,我是否正确专注于索引优化?
我正在尝试为我的集合中的所有文件投影FileName和FileSize,其大小为50 MB或更大,但我无法连接类型FileSize,因为它具有Int类型
我希望投影是
{
"result" : [
{
"_id" : ObjectId("5652c399a21dad0bb01b6308"),
"FileName" : "1234567890.xml",
"FileSize" : "11.06 MB"
},
{
"_id" : ObjectId("5652c399a21dad0bb01b630f"),
"FileName" : "2468101214.xml",
"FileSize" : "320.48 MB"
},
{
"_id" : ObjectId("5652c399a21dad0bb01b631f"),
"FileName" : "3691215180.xml",
"FileSize" : "12.95 MB"
}
}
Run Code Online (Sandbox Code Playgroud)
但到目前为止,我只能返回以下内容
{
"result" : [
{
"_id" : ObjectId("5652c399a21dad0bb01b6308"),
"FileName" : "1234567890.xml",
"FileSize" : 11.0610504150390630
},
{
"_id" : ObjectId("5652c399a21dad0bb01b630f"),
"FileName" : "2468101214.xml",
"FileSize" : 320.4827098846435500
},
{
"_id" : ObjectId("5652c399a21dad0bb01b631f"),
"FileName" : "3691215180.xml",
"FileSize" : …Run Code Online (Sandbox Code Playgroud) 对于我的一个集合,它必须保持unix时间戳而不是isodate,我通常将时间戳转换为新的Date(unix_timestamp).
现在我需要new Date(ts)聚合.(示例是在PHP中)
'$ project'=> array('day'=>'$ new Date(ts)',...
'$ group'=> array("_ id"=> array('day'=>'$ day)',...),...
没有到达结果.结果中的字段"日"完全丢失.
如何在聚合中转换?
给定数据库的形式
[
{ gender: "m", age: 1, name: "A" },
{ gender: "f", age: 2, name: "B" },
{ gender: "m", age: 3, name: "C" },
{ gender: "f", age: 1, name: "D" },
{ gender: "m", age: 2, name: "E" },
{ gender: "f", age: 3, name: "F" },
{ gender: "m", age: 1, name: "G" },
{ gender: "f", age: 2, name: "H" },
{ gender: "m", age: 3, name: "I" },
{ gender: "f", age: 1, name: …Run Code Online (Sandbox Code Playgroud) 我使用MongoDB和Mongoose作为我的ODM,我正在尝试使用populate和group by在同一语句中进行查询.
这是我的简单文档模型:
var userSchema = new Schema({
username: String
});
var messageSchema = new Schema({
from: { type: Schema.ObjectId, ref: 'User' },
to: { type: Schema.ObjectId, ref: 'User' },
message: String,
date: { type: Date, default: Date.now }
});
Run Code Online (Sandbox Code Playgroud)
我只是试图为每个用户收集每条消息,由他与之交谈的每个用户进行分组.我试过这样的:
this.find({ 'to': user })
.sort({ 'date': 1 })
.group('from')
.populate(['from', 'to'])
.exec(callback);
Run Code Online (Sandbox Code Playgroud)
但是,不幸的是,我的模型没有group方法.你有任何解决方案,让这个工作吗?
谢谢.
我的文档结构如下:
{
map: 'A',
points: [
{
type: 'type1',
distanceToSpawn: 110
},
{
type: 'type4',
distanceToSpawn: 40
},
{
type: 'type6',
distanceToSpawn: 30
}
]
},
{
map: 'B',
points: [
{
type: 'type1',
distanceToSpawn: 100
},
{
type: 'type2',
distanceToSpawn: 60
},
{
type: 'type3',
distanceToSpawn: 25
}
]
},
{
map: 'C',
points: [
{
type: 'type2',
distanceToSpawn: 90
},
{
type: 'type3',
distanceToSpawn: 1
},
{
type: 'type6',
distanceToSpawn: 76
}
]
}
Run Code Online (Sandbox Code Playgroud)
我希望得到所有具有type1按distanceToSpawn …
我有这样的文件:
{
"_id" : ObjectId("557eaf444ba222d545c3dffc"),
"foreing" : ObjectId("538726124ba2222c0c0248ae"),
"value" : "test",
}
Run Code Online (Sandbox Code Playgroud)
我想找到已复制的值对所有文件foreing和value.
我希望按ID(56e641d4864e5b780bb992c6和56e65504a323ee0812e511f2)显示产品,并在扣除减价后显示价格(如果有).
我可以使用聚合计算最终价格,但这会返回集合中的所有文档,如何使其仅返回匹配ID
"_id" : ObjectId("56e641d4864e5b780bb992c6"),
"title" : "Keyboard",
"discount" : NumberInt(10),
"price" : NumberInt(1000)
"_id" : ObjectId("56e65504a323ee0812e511f2"),
"title" : "Mouse",
"discount" : NumberInt(0),
"price" : NumberInt(1000)
"_id" : ObjectId("56d90714a48d2eb40cc601a5"),
"title" : "Speaker",
"discount" : NumberInt(10),
"price" : NumberInt(1000)
Run Code Online (Sandbox Code Playgroud)
这是我的疑问
productModel.aggregate([
{
$project: {
title : 1,
price: {
$cond: {
if: {$gt: ["$discount", 0]}, then: {$subtract: ["$price", {$divide: [{$multiply: ["$price", "$discount"]}, 100]}]}, else: "$price"
}
}
}
}
], function(err, docs){
if (err){
console.log(err)
}else{
console.log(docs) …Run Code Online (Sandbox Code Playgroud) 我是mongodb的新手并且第一次尝试聚合.在这里,我试图按每15分钟对推文进行分组.当我尝试在mongo控制台中运行以下查询时,我收到错误:
管道阶段规范对象必须只包含一个字段.
db.hashtag.aggregate([
{ "$group": {
"_id": {
"year": { "$year": "$tweettime" },
"dayOfYear": { "$dayOfYear": "$tweettime" },
"interval": {
"$subtract": [
{ "$minute": "$tweettime" },
{ "$mod": [{ "$minute": "$tweettime"}, 15] }
]
}
}},
"count": { "$sum": 1 }
}
])
Run Code Online (Sandbox Code Playgroud)
我无法在SO中找到原因的好解释.请分享您对此主题的看法以及查询错误的原因.