我有一个包含字段类型,totalA和totalB的文档的集合
我想使用聚合框架以按类型分组 - 并将totalA和totalB的总和加在一起.
我尝试的最后一件事(不起作用)是:
'$group' : {
'_id' : '$type',
'totalA' : { '$sum' : '$totalA' },
'totalB' : { '$sum' : '$totalB' },
'totalSum' : { '$sum' : '$totalA', '$sum' : '$totalB' },
} }
Run Code Online (Sandbox Code Playgroud)
totalSum只有一个字段的总和而不是组合值.
我想从MongoDB中的文档中检索子文档.我有以下文件:
{
"_id" : "10000",
"password" : "password1",
"name" : "customer1",
"enabled" : true,
"channels" : [
{
"id" : "10000-1",
"name" : "cust1chan1",
"enabled" : true
},
{
"id" : "10000-2",
"name" : "cust1chan2",
"enabled" : true
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想要的结果是:
{
"id" : "10000-1",
"name" : "cust1chan1",
"enabled" : true
}
Run Code Online (Sandbox Code Playgroud)
但是,到目前为止我能做的最好的事情是使用以下查询:
db.customer.find({"channels.id" : "10000-1"}, {"channels.$" : 1, "_id" : 0})
Run Code Online (Sandbox Code Playgroud)
但这给了我以下结果:
{
"channels" : [
{
"id" : "10000-1",
"name" : "cust1chan1",
"enabled" : true
}
] …Run Code Online (Sandbox Code Playgroud) 我试着通过一些订单从集合中获取数据:
db.data.aggregate([
{$limit: 1000},
{$group: {
_id: "$service",
count: {$sum: 1},
data: {$push: '$$ROOT'}
}}
]);
Run Code Online (Sandbox Code Playgroud)
但得到下一个错误:
Error("Printing Stack Trace")@:0
()@src/mongo/shell/utils.js:37
([object Array])@src/mongo/shell/collection.js:866
@(shell):6
uncaught exception: aggregate failed: {
"errmsg" : "exception: FieldPath field names may not start with '$'.",
"code" : 16410,
"ok" : 0
}
Run Code Online (Sandbox Code Playgroud)
我哪里做错了?
我想知道如何在MongoDB中的聚合中执行一种联合.让我们在集合中对以下文档进行成像(结构是为了示例):
{
linkedIn: {
people : [
{
name : 'Fred'
},
{
name : 'Matilda'
}
]
},
twitter: {
people : [
{
name : 'Hanna'
},
{
name : 'Walter'
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
如何制作一个返回twitter和linkedIn中人员联合的聚合?
{
{ name :'Fred', source : 'LinkedIn'},
{ name :'Matilda', source : 'LinkedIn'},
{ name :'Hanna', source : 'Twitter'},
{ name :'Walter', source : 'Twitter'},
}
Run Code Online (Sandbox Code Playgroud) 考虑到几个集合:
1.-用户
{
name: ...
id: ...
city: ...
age: ...
otherdata: ...
}
Run Code Online (Sandbox Code Playgroud)
2.- PETS
{
name: ...
owner: ...
type: ...
age: ...
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用$ lookup聚合来构建一组代表用户及其宠物的对象:
collectionusers.aggregate([
{
$lookup: {
from: "pets",
localField: "id",
foreignField: "owner",
as: "pets"
}
}
]);
Run Code Online (Sandbox Code Playgroud)
但是我想添加一个过滤器,以便只为每个用户添加1年以上的宠物(使用宠物对象内的年龄).
问题是,在聚合中添加$ match不起作用,因为它过滤掉没有旧宠物的用户,我希望用户即使没有宠物也能在那里.
实际上我也试图以同样的方式只获得每个用户中最老的宠物,我也没有找到配方.
在聚合中执行此操作的任何方法?
当然,目前我正在对返回的对象进行操作.
提前致谢.
是否可以使用聚合框架计算一阶导数?
例如,我有数据:
{time_series : [10,20,40,70,110]}
Run Code Online (Sandbox Code Playgroud)
我正在尝试获得如下输出:
{derivative : [10,20,30,40]}
Run Code Online (Sandbox Code Playgroud) 我在MongoDB中有一个带有树结构的文档列表,其中使用了带有父引用模型的模型树结构.我想要一个聚合查询,它返回祖先列表(直到根),给定'name'属性.
结构体:
{
'_id': '1',
'name': 'A',
'parent': '',
},
{
'_id': '2',
'name': 'B',
'parent': 'A',
},
{
'_id': '3',
'name': 'C',
'parent': 'B',
},
{
'_id': '4',
'name': 'D',
'parent': 'C',
}
Run Code Online (Sandbox Code Playgroud)
聚合结果:(给定,名称='D')
{
'_id': '4',
'name': 'D',
'ancestors': [{name:'C'}, {name:'B'}, {name:'A'}]
}
Run Code Online (Sandbox Code Playgroud)
Note:我现在无法更改文档结构.这会造成很多问题.我看到许多解决方案建议将模型树结构与祖先数组一起使用.但我现在不能用它.有没有办法用上面的模式使用单个聚合查询来实现它?谢谢
我有下一个mongo代码:
db.users.aggregate([
{
$match: {
$and: [
{ UserName: { $eq: 'administrator' } },
{ 'Company.CompanyName': { $eq: 'test' } }
]
}
},
{
$lookup: {
from: "companies",
localField: "CompanyID",
foreignField: "CompanyID",
as: "Company"
}
},
])
Run Code Online (Sandbox Code Playgroud)
该$lookup部分代码工作的伟大.我得到了下一个结果:
但是,如果我添加$match代码,它什么也没带来.
我发现问题出现在第二场比赛中: { 'Company.CompanyName': { $eq: 'test' } }但是我无法意识到它有什么问题.有任何想法吗?
更新:
我也尝试$unwind了$lookup结果,但没有运气:
db.users.aggregate([
{
$match: {
$and: [
{ UserName: { $eq: 'administrator' } },
{ 'Company.CompanyName': { $eq: 'edt5' } }
] …Run Code Online (Sandbox Code Playgroud) 对于MongoDB文档中的此示例,如何使用MongoTemplate编写查询?
db.sales.aggregate(
[
{
$group : {
_id : { month: { $month: "$date" }, day: { $dayOfMonth: "$date" }, year: { $year: "$date" } },
totalPrice: { $sum: { $multiply: [ "$price", "$quantity" ] } },
averageQuantity: { $avg: "$quantity" },
count: { $sum: 1 }
}
}
]
)
Run Code Online (Sandbox Code Playgroud)
或者一般来说,我如何按计算字段分组?
java mongodb spring-data aggregation-framework spring-mongodb
我有以下MongoDb查询工作:
db.Entity.aggregate(
[
{
"$match":{"Id": "12345"}
},
{
"$lookup": {
"from": "OtherCollection",
"localField": "otherCollectionId",
"foreignField": "Id",
"as": "ent"
}
},
{
"$project": {
"Name": 1,
"Date": 1,
"OtherObject": { "$arrayElemAt": [ "$ent", 0 ] }
}
},
{
"$sort": {
"OtherObject.Profile.Name": 1
}
}
]
)
Run Code Online (Sandbox Code Playgroud)
这将检索与另一个集合中的匹配对象连接的对象列表.
有没有人知道如何使用LINQ或使用这个确切的字符串在C#中使用它?
我尝试使用以下代码,但它似乎无法找到类型QueryDocument和MongoCursor- 我认为它们已被弃用?
BsonDocument document = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>("{ name : value }");
QueryDocument queryDoc = new QueryDocument(document);
MongoCursor toReturn = _connectionCollection.Find(queryDoc);
Run Code Online (Sandbox Code Playgroud)