我有mongo查询,它对文档进行组操作.
我几乎得到了预期的结果,除了我想要在没有空值或空值的情况下优化结果.
目前我的查询如下所示:
db.productMetadata.aggregate([{$group:{"_id":{"color":"$productAttribute.colour","gender":"$productAttribute.gender"},"count" : {$sum : 1}}}]);
Run Code Online (Sandbox Code Playgroud)
结果看起来像这样:
{ "_id" : { "color" : "BLUE", "gender" : "MEN" }, "count" : 1 }
{ "_id" : { }, "count" : 4 }
{ "_id" : { "color" : "NA", "gender" : "WOMEN" }, "count" : 1 }
{ "_id" : { "color" : "BLACK", "gender" : "MEN" }, "count" : 1 }
{ "_id" : { "color" : "BROWN", "gender" : "WOMEN" }, "count" : 1 }
{ "_id" …Run Code Online (Sandbox Code Playgroud) mongodb mongodb-query aggregation-framework mongodb-aggregation
我正在尝试做这样的事情:
use user;
db.user.aggregate([
{
$lookup:
{
from: "organization.organization",
localField: "organizationId",
foreignField: "uuid",
as: "user_org"
}
}
])
Run Code Online (Sandbox Code Playgroud)
user并且organization在两个不同的数据库中.
如果不可能,有哪些替代方案?
MongoDB聚合按分钟呈指数级复杂化!
我在迄今为$unwind嵌套数组,然后执行$lookup由_id每一个对象的从unwinded嵌套数组.我的最后一次尝试是逆转放松$group.但是,我无法使用其原始属性名称以及每个文档的其余原始直接属性重建原始嵌入数组.
这是我到目前为止的尝试:
db.users.aggregate([
{
$unwind: "$profile",
$unwind: {
path: "$profile.universities",
preserveNullAndEmptyArrays: true
}
},
{
$lookup: {
from: "universities",
localField: "profile.universities._id",
foreignField: "_id",
as: "profile.universities"
}
},
{
$group: {
_id: "$_id",
emails: { "$first": "$emails" },
profile: { "$first": "$profile" },
universities: { "$push": "$profile.universities" }
}
}
]).pretty()
Run Code Online (Sandbox Code Playgroud)
我得到的是这样的:
{
"_id" : "A_USER_ID",
"emails" : [
{
"address" : "AN_EMAIL_ADDRESS",
"verified" : false
}
],
"profile" : {
"name" …Run Code Online (Sandbox Code Playgroud) join mongodb mongodb-query aggregation-framework mongodb-aggregation
在我之前的问题的参考,我有一个关于$ lookup的问题,添加一些条件.您可以从以下链接描述中获得有关问题的足够参考.
照片:
{_id: 1, photo_name: '1.jpg', photo_description: 'description 1', album_id: 1, flag:1 },
{_id: 2, photo_name: '2.jpg', photo_description: 'description 2', album_id: 1, flag:1 },
{_id: 3, photo_name: '3.jpg', photo_description: 'description 3', album_id: 1, flag:1 },
{_id: 4, photo_name: '4.jpg', photo_description: 'description 4', album_id: 2, flag:0 },
{_id: 5, photo_name: '5.jpg', photo_description: 'description 5', album_id: 2, flag:0 },
{_id: 6, photo_name: '6.jpg', photo_description: 'description 6', album_id: 2}
Run Code Online (Sandbox Code Playgroud)
专辑:
{_id: 1, album_name: "my album 1", album_description: "album description 1", emoji_id: 1}, …Run Code Online (Sandbox Code Playgroud) mongodb mongodb-query aggregation-framework mongodb-aggregation
我希望计算与我的查询匹配的文档中名称数量的所有列,
tickets.count({time: {$gte: a}, time: {$lte: tomorrow}}).then(function (numTickets) {
Run Code Online (Sandbox Code Playgroud)
如何获得称为金额的文档列的总结果?
例如,如果我有:
{ time: 20, amount: 40}
{ time: 40, amount: 20}
Run Code Online (Sandbox Code Playgroud)
它会返回总金额(60)?
请记住,我确实需要{time: {$gte: a}, time: {$lte: tomorrow}在查询中使用。
我该怎么做?
javascript mongoose mongodb aggregation-framework mongodb-aggregation
我怎样才能在mongo db shell中使用for循环?
我的尝试在这一点上坚持:
for (var i = 0; i <= 6; i=i+0.12){
var n = i + 0.12;
db.test.aggregate(
{ $sort: {'deviation': -1}},
{ $unwind: '$foo' },
{ $match: { 'foo.km': {$gt: {n}, $lt: {i}}}},
{ $limit: 1}
)
}
Run Code Online (Sandbox Code Playgroud)
感谢帮助!
mongodb mongo-shell mongodb-query aggregation-framework mongodb-aggregation
如何根据time字段获取第一个和最后一个文档.我可以使用$group和获取$first并$last记录,但我不需要在这里分组,只需获得第一个和最后一个完整的文档.也许我可以使用slice?此查询不起作用:
{
"aggregate": "353469045637980_data",
"pipeline": [
{
"$match": {
"$and": [
{
"time": {
"$gte": 1461369600
}
},
{
"time": {
"$lt": 1461456000
}
}
]
}
},
{
"$project": {
"first": {
"$slice": 1
},
"last": {
"$slice": -1
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud) mongodb mongodb-query aggregation-framework mongodb-aggregation
我坚持实现weekofMonth而不是WeekofYear. 有人可以指导我如何做到这一点吗?
db.activity.aggregate([
{
$group:{
_id: {
week: { $week: "$createdAt" },
month: { $month: "$createdAt" },
year: { $year: "$createdAt" }
},
count: { $sum: 1 }
}
},
{ $match : { "_id.year" : 2016, "_id.month" : 5 } }
])
Run Code Online (Sandbox Code Playgroud)
输出
/* 1 */
{
"_id" : {
"week" : 19,
"month" : 5,
"year" : 2016
},
"count" : 133.0
}
/* 2 */
{
"_id" : {
"week" : 18,
"month" …Run Code Online (Sandbox Code Playgroud) 我想找到 collectionTwo 中存在多少个 collectionOne 以下的“taskId”。此处,collectionOne 下面的“taskId”嵌入在文档中的数组中。
另外,让我知道执行此操作的不同方法(如果可能)。
db.collectionOne.find({"sId":"DCNrnPeKFrBv" }).pretty()
{
"_id" : "sX8o7mJhebs",
"sId" : "DCNrnPeKFrBv",
"data" : [
{
"oId" : "7SycYQ",
"taskId" : 146108906
},
{
"oId" : "7SycYQ",
"taskId" : 14623846
},
{
"oId" : "fANQ",
"taskId" : 1461982
},
{
"oId" : "fAeNQ",
"taskId" : 131732
},
{
"oId" : "t6AF5yn",
"taskId" : 197681
}
]
}
> db.collectionTwo.find().pretty().limit(2)
{
"_id" : 146108906,
"oId" : "7SycYQ",
"name" : "ABC"
}
{
"_id" : 1461982,
"oId" : …Run Code Online (Sandbox Code Playgroud) mongodb mongodb-query aggregation-framework mongodb-aggregation
假设我有一个像下面这样的文档模型
{
"_id" : "QggaecdDWkZzMmmM8",
"features" : [
{
"language" : "en",
"values" : [
{
"name" : "feature 1",
"values" : [
"test",
"best"
]
},
{
"name" : "feature2",
"values" : [
"guest",
"nest"
]
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
现在我需要运行查询并返回特征的唯一名称和值对。就像一个文档的名称特征 1 带有“test”和最佳值,另一个文档具有相同的键(特征 1 具有不同的值,即“guest”),因此结果将是
name: featuer 1
values: [test, best and guest]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我尝试了以下查询,但最后返回错误
db.getCollection('products').aggregate(
{$unwind: '$features'},
{$group:
{_id: "$features.values.name"},
name: {$addToSet: '$name'}
})
Run Code Online (Sandbox Code Playgroud)
错误信息是
例外:管道阶段规范对象必须只包含一个字段
mongodb mongodb-query aggregation-framework mongodb-aggregation