我正在使用Spring Data for MongoDB并获得以下类
class A {
List<B> b;
}
class B {
Date startDate;
Date endDate;
}
Run Code Online (Sandbox Code Playgroud)
当我保存一个A的对象时,它就像持久化一样
{
"_id" : "DQDVDE000VFP8E39",
"b" : [
{
"startDate" : ISODate("2009-10-05T22:00:00Z"),
"endDate" : ISODate("2009-10-29T23:00:00Z")
},
{
"startDate" : ISODate("2009-11-01T23:00:00Z"),
"endDate" : ISODate("2009-12-30T23:00:00Z")
}
]
}
Run Code Online (Sandbox Code Playgroud)
现在我想在db中查询匹配b中条目的文档,其中给定日期在startDate和endDate之间.
Query query = new Query(Criteria.where("b").elemMatch(
Criteria.where("startDate").gte(date)
.and("endDate").lte(date)
);
Run Code Online (Sandbox Code Playgroud)
这导致以下mongo查询:
{
"b": {
"$elemMatch": {
"startDate" : { "$gte" : { "$date" : "2009-11-03T23:00:00.000Z"}},
"endDate" : { "$lte" : { "$date" : "2009-11-03T23:00:00.000Z"}}
}
}
} …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试按三个值的键排序和排序.但是让我们从文档结构开始:
{
_id: "DOCIDGOESHERE01",
type: "MESSAGE",
date: "2011-08-24 06:49:02",
author: "USERIDGOESHERE01",
receiver: ["USERIDGOESHERE02", "USERIDGOESHERE03"],
message: "ok let's do this"
}
Run Code Online (Sandbox Code Playgroud)
主要目标是查询couchDB以查找选定用户向特定用户发送的消息,并按日期对其进行排序.有些消息没有任何接收器,表明它们是公开的,任何人都可以阅读.
我目前使用的地图功能如下所示:
function map(doc) {
if(doc.receiver.lenth==0)
emit([doc.date, null, doc.author], doc._id);
else for(var idx in doc.receiver)
emit([doc.date, doc.receiver[idx], doc.author], doc._id);
}
Run Code Online (Sandbox Code Playgroud)
在查询couchDB HTTP接口时,我尝试了类似的请求
HTTP GET xxx/messages?key=[{}, "USERIDGOESHERE02", {}]
Run Code Online (Sandbox Code Playgroud)
要么
HTTP POST xxx/messages
{
keys: [
[{}, "USERIDGOESHERE02", "USERIDGOESHERE01"],
[{}, "USERIDGOESHERE02", "USERIDGOESHERE03"],
[{}, "USERIDGOESHERE02", "USERIDGOESHERE04"],
]
}
Run Code Online (Sandbox Code Playgroud)
但是所有这些都没有产生我想要制作的文件清单.你对这个任务有什么建议吗?或者用couchDB构建这样的过滤结果是不可能的?非常感谢你提前!
我想将一个n元素数组转移到java中的二维数组.
例如:
[1,2,3,4]
这个数组应该转移到一个二维数组
[[1,2],[1,3],[1,4],[2,3],[2,4] [3,4]]