我有一个具有以下结构的集合中的用户文档:
{ "_id" : ObjectId( "4fb54ef46d93b33b21003951" ),
"activities" : [
{ "id" : ObjectId( "4fd66f9001e7fe9f03000065" ),
"type" : "checkin",
"date_time_created" : Date( 1339453328000 )},
{ "date_time_created" : Date( 1337351732000 ),
"date_time_updated" : Date( 1337351952635 ),
"id" : ObjectId( "4fb65e346d93b3fe77000000" )}
]
}
Run Code Online (Sandbox Code Playgroud)
我可以根据日期轻松查询这些文档:
User.where(
:activities => {
'$elemMatch' => {
:date_time_created => { '$gte' => start_date, '$lt' => end_date }
}
}
).length
Run Code Online (Sandbox Code Playgroud)
根据日志:
MOPED:127.0.0.1:27017 COMMAND database = db command = {:count =>"users",:query => {"activities"=> {"$ elemMatch"=> {"date_time_created"=> {"$ gte" …
我有一个具有以下结构的mongo集合
{
"userId" : ObjectId("XXX"),
"itemId" : ObjectId("YYY"),
"resourceId" : 1,
"_id" : ObjectId("528455229486ca3606004ec9"),
"parameter" : [
{
"name" : "name1",
"value" : 150,
"_id" : ObjectId("528455359486ca3606004eed")
},
{
"name" : "name2",
"value" : 0,
"_id" : ObjectId("528455359486ca3606004eec")
},
{
"name" : "name3",
"value" : 2,
"_id" : ObjectId("528455359486ca3606004eeb")
}
]
}
Run Code Online (Sandbox Code Playgroud)
可以有多个文档具有相同的'useId'和不同的'itemId',但参数在所有文档中都具有相同的键/值对.
我想要完成的是为每个唯一的"userId"返回聚合参数"name1","name2"和"name3"而忽略'itemId'.所以每个用户的最终结果都是这样的:
{
"userId" : ObjectId("use1ID"),
"name1" : (aggregatedValue),
"name2" : (aggregatedValue),
"name3" : (aggregatedVAlue)
},
{
"userId" : ObjectId("use2ID"),
"name1" : (aggregatedValue),
"name2" : (aggregatedValue),
"name3" : …Run Code Online (Sandbox Code Playgroud) 我需要为集合中的每个用户获取集合中的最新文档。例如,假设我有这样的数据:
[
{ user: "bob", time: ISODate("Sat, 24 Mar 2012 05:52:21 +0000"), value: "a" },
{ user: "bob", time: ISODate("Sun, 25 Mar 2012 05:52:21 +0000"), value: "b" },
{ user: "joe", time: ISODate("Sat, 24 Mar 2012 05:52:21 +0000"), value: "c" },
{ user: "bob", time: ISODate("Mon, 26 Mar 2012 05:52:21 +0000"), value: "d" },
{ user: "joe", time: ISODate("Sun, 25 Mar 2012 05:52:21 +0000"), value: "e" }
]
Run Code Online (Sandbox Code Playgroud)
查询后,我想找回这些条目:
[
{ user: "bob", time: ISODate("Mon, 26 Mar 2012 05:52:21 +0000"), …Run Code Online (Sandbox Code Playgroud) 我已经在SO和谷歌上提出了类似的问题2天了.这是文件
{
"rows" : [
{
"company" : "1 Gables Inn Bed & Breakfast",
"address" : " 318 Quapaw Avenue Hot Springs",
"a_url" : " AR 71901 Phone: 501-623-7576 ",
"json" : {
"results" : [
{
"address_components" : [
{
"long_name" : "318",
"short_name" : "318",
"types" : [ "street_number" ]
},
{
"long_name" : "Quapaw Avenue",
"short_name" : "Quapaw Ave",
"types" : [ "route" ]
},
{
"long_name" : "Hot Springs",
"short_name" : "Hot Springs",
"types" : [ …Run Code Online (Sandbox Code Playgroud) 使用mongodb shell,我能够执行一个检索整个文档的聚合查询.为了做到这一点,我使用$$ ROOT变量.
db.reservations.aggregate([
{ $match : { hotelCode : "0360" } },
{ $sort : { confirmationNumber : -1 , timestamp: -1 } },
{ $group : {
_id : "$confirmationNumber",
timestamp :{$first : "$timestamp"},
fullDocument :{$first : "$$ROOT"}
}}
])
Run Code Online (Sandbox Code Playgroud)
它检索内容为confirmationNumber,timestamp,fullDocument的对象.fullDocument是整个文档.
我想知道是否可以对Spring-Data和聚合框架做同样的事情.
我的java代码是:
TypedAggregation<ReservationImage> aggregation = newAggregation(
ReservationImage.class,
match(where("hotelCode").is(hotelCode)),
sort(Direction.DESC,"confirmationNumber","timestamp"),
group("confirmationNumber").
first("timestamp").as("timestamp").
first("$$ROOT").as("reservationImage"));
List<myClass> items = mongoTemplate.aggregate(
aggregation,
myClass.class).getMappedResults();
Run Code Online (Sandbox Code Playgroud)
错误是:org.springframework.data.mapping.PropertyReferenceException:找不到类型myClass的属性$$
你有什么想法?
谢谢.
假设我们在数据库中有以下结构的记录。
{
"_id": 1234,
"tags" : [ "t1", "t2", "t3" ]
}
Run Code Online (Sandbox Code Playgroud)
现在,我想检查数据库是否包含带有数组中指定的任何标签的记录 tagsArray which is [ "t3", "t4", "t5" ]
我了解$in运算符,但我不仅想知道数据库中的任何记录是否具有tagsArray中指定的任何标记,还想知道数据库中记录的哪个标记与tagsArray中指定的任何标记相匹配。(即在上述记录中为t3)
也就是说,我想比较两个数组(一个记录,另一个由我给定),并找出公共元素。
我需要将此表达式与查询中的许多表达式一起使用,因此投影运算符(例如$,$ elematch等)不会有太大用处。(或者有没有一种方法可以使用它而不必遍历所有记录?)
我想我可以使用$where运算符,但我认为这不是最好的方法。如何解决这个问题?
我有一大堆数据,我试图从Mongo(节点js)中提取数据以呈现一些图形.
我需要从几千个用户中提取最近7天的数据.每个用户的特定数据格式如下:
{
"passedModules" :
[{
"module" : ObjectId("53ea17dcac1d13a66fb6d14e"),
"date" : ISODate("2014-09-17T00:00:00.000Z")
},
{
"module" : ObjectId("53ec5c91af2792f1112554e8"),
"date" : ISODate("2014-09-17T00:00:00.000Z")
},
{
"module" : ObjectId("53ec5c5baf2792f1112554e6"),
"date" : ISODate("2014-09-17T00:00:00.000Z")
}]
}
Run Code Online (Sandbox Code Playgroud)
目前我有一组非常混乱的查询正在运行,但我相信这可以完全与Mongo一起完成吗?
基本上,我需要以动态的方式将所有条目从7天前提取到现在.
是否有一种尝试和测试方式以这种方式处理动态日期,更具体地说是使用mongo中的聚合框架?聚合框架的原因是我需要在之后对这些进行分组.
非常感谢
我有数百万个具有以下架构的文档:
{
_id: '3fbwehgzgfwehgrqwegrqwer',
someData: [0,1],
moreData: {
key: true
}
},
{
_id: '24nj5h219ebwjfqwverqwer',
someData: [2,3],
moreData: {
key: true
}
},
Run Code Online (Sandbox Code Playgroud)
我需要将someData数组组合成一个结果数组,例如:
{
result: [
[0,1],
[2,3]
]
}
Run Code Online (Sandbox Code Playgroud) 下面的数据存在于“ examSheet”集合中
{"name":"a1", "std":"9", "year":"2017", "exam":"halfyr_T", "marks":[{"p":"45","m":"40","c":"50"}]}
{"name":"a1", "std":"9", "year":"2017", "exam":"halfyr_P", "marks":[{"p":"40","m":"28","c":"38"}]}
{"name":"a1", "std":"9", "year":"2017", "exam":"annual_T", "marks":[{"p":"40","m":"50","c":"48"}]}
{"name":"a1", "std":"9", "year":"2017", "exam":"annual_P", "marks":[{"p":"45","m":"42","c":"18"}]}
{"name":"a2", "std":"9", "year":"2017", "exam":"halfyr_T", "marks":[{"p":"25","m":"30","c":"50"}]}
{"name":"a2", "std":"9", "year":"2017", "exam":"halfyr_P", "marks":[{"p":"41","m":"48","c":"28"}]}
{"name":"a2", "std":"9", "year":"2017", "exam":"annual_T", "marks":[{"p":"30","m":"48","c":"24"}]}
{"name":"a2", "std":"9", "year":"2017", "exam":"annual_P", "marks":[{"p":"35","m":"08","c":"38"}]}
{"name":"b1", "std":"10", "year":"2017", "exam":"halfyr_T","marks":[{"p":"45","m":"40","c":"50"}]}
{"name":"b1", "std":"10", "year":"2017", "exam":"halfyr_P", "marks": [{"p":"40","m":"28","c":"38"}]}
{"name":"b1", "std":"10", "year":"2017", "exam":"annual_T", "marks": [{"p":"40","m":"50","c":"48"}]}
{"name":"b1", "std":"10", "year":"2017", "exam":"annual_P", "marks": [{"p":"45","m":"42","c":"18"}]}
{"name":"b2", "std":"10", "year":"2017", "exam":"halfyr_T", "marks": [{"p":"25","m":"30","c":"50"}]}
{"name":"b2", "std":"10", "year":"2017", "exam":"halfyr_P", "marks": [{"p":"41","m":"48","c":"28"}]}
{"name":"b2", "std":"10", "year":"2017", "exam":"annual_T", …Run Code Online (Sandbox Code Playgroud) 汇总查询返回错误。
'猫鼬5.x不允许将大量操作员传递给Model.aggregate()。代替Model.aggregate({ $match }, { $skip }),做Model.aggregate([{ $match }, { $skip }]),
我正在使用mongoose和MongoDb版本
“ mongoose”:“ ^ 5.5.4”,mongod版本:3.6.12
请建议我,我将非常感谢您。
mongodb ×10
mongoose ×2
java ×1
javascript ×1
mapreduce ×1
match ×1
moped ×1
node.js ×1
ruby ×1
spring-data ×1