我有几个数字字段需要聚合.假设我的文档结构如下:
_id: 1234,
numValue1: 10,
numValue2: 20,
numValue3: 30,
numValue4: 40
Run Code Online (Sandbox Code Playgroud)
如果我想使用其中一个数字字段向我的管道添加计算字段,我可以这样做:
db.myCollection.aggregate(
{
$project : {
someComputedField : { $add:["$numValue1", 15] }
}
})
Run Code Online (Sandbox Code Playgroud)
如果我想根据其中两个字段添加一个计算字段,我知道我可以这样做:
db.myCollection.aggregate(
{
$project : {
someComputedField : { $add:["$numValue1", "$numValue2"] }
}
})
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是如果我需要做$ numValue1 + $ numValue2 + $ numValue3 + $ numValue4?
或者更有趣的是$ numValue1*($ numValue2 + $ numValue3)/ $ numValue4?
我有以下格式的集合中的记录:
"_id" : "2013-05-23",
"authors_who_sold_books" : [
{
"id" : "Charles Dickens",
"num_sold" : 1,
"customers" : [
{
"time_bought" : 1368627290,
"customer_id" : 9715923
}
]
},
{
"id" : "JRR Tolkien",
"num_sold" : 2,
"customers" : [
{
"date_bought" : 1368540890,
"customer_id" : 9872345
},
{
"date_bought" : 1368537290,
"customer_id" : 9163893
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
每个日期都有一个记录,其中许多日期将包含同一作者.我正在查询返回以下内容:
{
"_id" : "Charles Dickens",
"num_sold" : 235,
"customers" : [
{
"date_bought" : 1368627290,
"customer_id" : 9715923
},
{ …Run Code Online (Sandbox Code Playgroud) 我有这样的文件:
{
"_id" : ObjectId("53340d07d6429d27e1284c77"),
"worktypes" : [
{
"name" : "Pompas",
"works" : [
{
"name" : "work 1",
"code" : "0001"
}
]
},
{
"name" : "Pompas "",
"works" : [
{
"name" : "work 2",
"code" : "0002"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我做了一个查询,只获取本文档的工作类型之一的作品,这是查询:
db.categories.find({$and: [
{ "_id": ObjectId('53340d07d6429d27e1284c77')},
{"worktypes.name": "Pompas"}
]},{"worktypes.works.$":1})
Run Code Online (Sandbox Code Playgroud)
但我得到了
{
"_id" : ObjectId("53340d07d6429d27e1284c77"),
"worktypes" : [
{
"name" : "Pompas",
"works" : [
{
"name" : "work 1",
"code" : "0001"
} …Run Code Online (Sandbox Code Playgroud) 对于您来说,这听起来像是一个简单的问题,但我花了3个多小时才能实现,但是我陷入了困境。
输入:
问题陈述:我需要从数据库中找到满足以下条件的所有文档:
查询:如何达到要求#3。
我的尝试:在我的尝试中,我只能根据关键字match列出(也不要将weight乘以2)。
标签是文档的数组。每个标签的结构就像
{
"id" : "ICC",
"some Other Key" : "some Other value"
}
Run Code Online (Sandbox Code Playgroud)
关键字是字符串数组:
["women", "cricket"]
Run Code Online (Sandbox Code Playgroud)
查询:
var predicate = [
{
"$match": {
"$or": [
{
"keywords" : {
"$in" : ["cricket", "women"]
}
},
{
"tags.id" : {
"$in" : ["ICC"]
}
}
]
}
},
{
"$project": {
"title":1,
"_id": 0,
"keywords": 1,
"weight" : {
"$size": {
"$setIntersection" : [
"$keywords" , …Run Code Online (Sandbox Code Playgroud) 有没有一种方法可以在MongoDB中组合/产生嵌套元素的叉积。举例来说,我有
{
images:
[
{
name: 'A',
url: 'urlA'
},
{
name: 'B',
url: 'urlB'
}
],
tags: [
{
name: 'Tag1',
description: 'description1'
},
{
name: 'Tag2',
description: 'description2'
}
]
}
Run Code Online (Sandbox Code Playgroud)
通过首选结果应该是
[
{
url: 'urlA',
name: 'Tag1'
},
{
url: 'urlA',
name: 'Tag2'
},
{
url: 'urlB',
name: 'Tag1'
},
{
url: 'urlB',
name: 'Tag2'
}
]
Run Code Online (Sandbox Code Playgroud)
是否可以将生成的文档存储在新集合中?
我为以下数据结构创建了MapReduce作业:
{ "_id" : 1), "docid" : 119428, "term" : 5068, "score" : 0.198 }
{ "_id" : 2), "docid" : 154690, "term" : 5068, "score" : 0.21 }
{ "_id" : 3), "docid" : 156278, "term" : 5068, "score" : 0.128 }
{ "_id" : 4), "docid" : 700, "term" : "fire", "score" : 0.058 }
{ "_id" : 5), "docid" : 857, "term" : "fire", "score" : 0.133 }
{ "_id" : 6), "docid" : 900, "term" : …Run Code Online (Sandbox Code Playgroud) 由于MongoDB最近引入了graphLookup,我试图找出是否可以保存一个简单的社交关系图.我目前正在使用neo4j.
我理解graphLookup是一个递归搜索,它只是通过每个文档的'connectFromField'更深入.
虽然我能够做基本的东西,但我想为每个关系提供更多的属性.例如,这里的第一个例子:(员工和报告层次结构)
https://docs.mongodb.com/manual/reference/operator/aggregation/graphLookup/
{ "_id" : 2, "name" : "Eliot", "reportsTo" : "Dev" }Run Code Online (Sandbox Code Playgroud)
如果我需要在'reportsTo'值中添加一个开始日期,可以这样:
{ "_id" : 2, "name" : "Eliot", "reportsTo" : {"name": "Dev", "from": "date" } }Run Code Online (Sandbox Code Playgroud)
我担心这不受支持.
我想知道是否有人以这种方式使用了MongoDB.
我有一个称为“约会”的文档集合,我正在尝试将每天的约会数量分组在一起,并填充一个称为AppointmentSummary的对象列表,其中每天将有一个对象,我正在使用Spring boot尝试并实现这一点,但是我一直遇到问题。
我在同一包中创建了以下三个类
AppointmentSummaryRepository.java
public interface AppointmentSummaryRepository extends
MongoRepository<Appointment,String>, AppointmentSummaryRepositoryCustom {
}
Run Code Online (Sandbox Code Playgroud)
AppointmentSummaryRepositoryCustom.java
public interface AppointmentSummaryRepositoryCustom {
List<AppointmentSummary> aggregate(LocalDate startDate, LocalDate endDate);
Run Code Online (Sandbox Code Playgroud)
}
AppointmentSummaryRepositoryImpl.java
public class AppointmentSummaryRepositoryImpl implements AppointmentSummaryRepositoryCustom {
private final MongoTemplate mongoTemplate;
private final Logger log = LoggerFactory.getLogger(AppointmentSummaryRepositoryImpl.class);
@Autowired
public AppointmentSummaryRepositoryImpl(MongoTemplate mongoTemplate){
this.mongoTemplate = mongoTemplate;
}
@Override
public List<AppointmentSummary> aggregate(LocalDate startDate, LocalDate endDate){
log.debug("This is a request to aggerate appointment summary between {} to {}", startDate.toString(), endDate.toString());
MatchOperation matchOperation = getMatchOperation(startDate, endDate);
GroupOperation groupOperation = getGroupOperation();
log.debug("End group …Run Code Online (Sandbox Code Playgroud) 编辑:我们的用例:我们从服务器获取有关访客的继续报告。将这些“报告”插入MongoDB之后,我们会在服务器上预聚合几秒钟的数据。
在我们的信息中心中,我们想根据时间范围查询不同的浏览器,操作系统,地理位置(国家等)。
就像这样:在过去7天内,有1000位使用Chrome的访客,来自德国的500位访客,来自英国的200位,依此类推。
我非常需要仪表板所需的MongoDB查询。
我们有以下报告条目:
{
"_id" : ObjectId("59b9d08e402025326e1a0f30"),
"channel_perm_id" : "c361049fb4144b0e81b71c0b6cfdc296",
"source_id" : "insomnia",
"start_timestamp" : ISODate("2017-09-14T00:42:54.510Z"),
"end_timestamp" : ISODate("2017-09-14T00:42:54.510Z"),
"timestamp" : ISODate("2017-09-14T00:42:54.510Z"),
"resource_uri" : "b755d62a-8c0a-4e8a-945f-41782c13535b",
"sources_info" : {
"browsers" : [
{
"name" : "Chrome",
"count" : NumberLong(2)
}
],
"operating_systems" : [
{
"name" : "Mac OS X",
"count" : NumberLong(2)
}
],
"continent_ids" : [
{
"name" : "EU",
"count" : NumberLong(1)
}
],
"country_ids" : [
{
"name" : "DE",
"count" : NumberLong(1)
}
], …Run Code Online (Sandbox Code Playgroud) 当我在其他用户配置文件上时,如何建模我的mongoose模式以获取这三个按钮?
我的用户架构
const schema = new Mongoose.Schema({
firstName: { type: String, default: '', trim: true },
lastName: { type: String, default: '', trim: true },
}, { timestamps: true })
Run Code Online (Sandbox Code Playgroud)
我无法为此找到正确的建模......还请在建模后建议聚合...
mongoose mongodb node.js mongodb-query aggregation-framework