我需要将ISODate转换为字符串格式,如“2019-06-27”,并且还需要按日期对其进行排序。然而,我已经以所需的格式转换了日期,但由于日期字符串格式较早转换而混淆了日期排序。
应用环境
以下是文档在MongoDB集合中的存储方式:
{
"_id": "9d78d0e8-7b13-4487-88a3-d91d64f29b38",
"Number": "001",
.......,
.......,
"createdon": {
"$date": "2019-09-19T00:00:00.000Z"
},
"modifiedon": {
"$date": "2019-12-17T19:52:00.000Z"
}
}
这是工作的C#函数,但没有日期排序:
public string GetData(Data.DataModel.TestModel model)
{
string collectionName = "testCollection";
BsonDocument sort = new BsonDocument();
BsonDocument match = new BsonDocument();
BsonDocument project = new BsonDocument();
int skip = model.skip;
int limit = model.limit;
try
{
match.Add();
project.AddRange(new BsonDocument {
{ "TDLNumber", 1 },
{ "createdon", new BsonDocument("$dateToString",
new BsonDocument("format", "%Y-%m-%d").Add("date", "$createdon")) // format like 2019-06-27
},
{ "modifiedon", new BsonDocument("$dateToString",
new BsonDocument("format", "%Y-%m-%d").Add("date", "$modifiedon"))// format like 2019-06-27
}
});
sort.AddRange(new BsonDocument { { "createdon", -1 }, { "modifiedon", -1 } });
List<BsonDocument> lstReslut = dbo.FindAggDynQuery(collectionName, match, project, skip, limit, sort);
QueryResult = lstReslut.ToJson();
}
catch (Exception)
{
QueryResult = "[]";
}
return QueryResult;
}
但如果我没有日期转换,它的工作原理是这样的
{ "createdon", 1},
{ "modifiedon",1},
// { "createdon", new BsonDocument("$dateToString",
// new BsonDocument("format", "%Y-%m-%d").Add("date", "$createdon")) // format like 2019-06-27
// },
//{ "modifiedon", new BsonDocument("$dateToString",
// new BsonDocument("format", "%Y-%m-%d").Add("date", "$modifiedon"))// format like 2019-06-27
//}
下面是数据库层查询功能:
public List<BsonDocument> FindAggDynQuery(string collectionName, BsonDocument find, BsonDocument project, int skip, int limit, BsonDocument sort)
{
using (var connectionManager = new Test.Data.ConnectionManager())
{
var _collection = connectionManager.GetDBCollection(collectionName);
var result = _collection.Find(find).Sort(sort).Project(project).Skip(skip).Limit(limit).ToListAsync().Result;
return result;
}
}
这里出了什么问题。任何帮助都将不胜感激!!
在工作了几个小时后,以下是我的最佳答案。
使用Aggregate方法对GetData方法的更改:
match.Add();
project.AddRange(new BsonDocument {
{ "TDLNumber", 1 },
{ "createdon", 1 },
{ "modifiedon", new BsonDocument("$dateToString",
new BsonDocument("format", "%Y-%m-%d").Add("date", "$modifiedon"))// format like 2019-06-27
}
});
BsonDocument expAddfield = new BsonDocument(new BsonDocument("$addFields", new
BsonDocument("createdon", new BsonDocument("$dateToString",
new BsonDocument
{
{ "date", "$createdon" },
{ "format", "%Y-%m-%d" }
}))));
sort.Add("createdon", -1);
List<BsonDocument> lstReslut= dbo.FindAggDynNoGroupWithSortSkipLimit(watertrackingCollection, expProject, match1, expAddfield, sort, skip, limit);
QueryResult = lstReslut.ToJson();
聚合方法
public List<BsonDocument> FindAggDynQuery(string collectionName, BsonDocument expProject, BsonDocument expMatch, BsonDocument expAddfield, BsonDocument expSort, int skip, int limit)
{
var connectionManager = new ez2Track.Data.ConnectionManager();
var _collection = connectionManager.GetDBCollection(collectionName);
var agg = _collection.Aggregate().Project(expProject).Match(expMatch).AppendStage<BsonDocument>(expAddfield).Sort(expSort).Skip(skip).Limit(limit);
var result = agg.ToListAsync().Result;
return result;
}
我试图用Visual Studio生成以下示例C++代码: 我根据以下内容构建了驱动程序:https://github.com/mongodb/mongo-cxx-driver/blob/master/appveyor.yml 系统信息:-Win10-Visual Studio Community 2015 Update 3-使用Boost 1.60.0 64位-使用CMake 3.7.0-使用G
我假设Selenium打开的chrome浏览会话将与google chrome本地安装相同。但是当我尝试在这个网站上搜索时,即使只是用selenium打开它并手动控制搜索过程,我会得到一个错误信息,当我使用常规chrome与我自己的个人资料或在incognito窗口中搜索结果返回良好。每当我搜索这个问题,我发现结果指出鼠标移动或点击模式提供它。但情况并非如此,因为我在打开浏览器后尝试手动控制。ht
我有以下LINQ查询,这一个对我很有用 现在我需要的是排除一个月,即告诉查询不要向我显示1月和2月的月份。TallerDate包含一个列表的日期,即,在那个TallerDate中有几个日期为一月、二月和三月的记录。我在这个查询中所做的是将最低的月份(即一月和三月)带入f中,但这并不是必须的,正如我之前所说的,我需要的是TallerDate不显示一月和二月的月份,而是显示三月以后的月份
在执行简单查询时,我有一个重复的查询。文件: someclass.java: someclassRepository.java: service.java: Application.Properties: 日志文件:
我正在尝试使用MongoDBJava驱动程序作为聚合命令的一部分创建查询。目前我允许日期范围或特定日期数组作为参数。例如 日期范围查询工作正常,我解析xml并将其转换为在mongo中生成以下查询的DBObject; 对于指定日期,我只想返回在给定日期的00:00:00.000和第二天的00:00:00.000之间发生的结果。根据我对mongo查询的基本了解,我希望做一个类似于日期范围的$匹配,但是
我已经准备了一些在Mongo上执行的脚本。它在命令行中按预期工作: 但是当我试图在java(scala)代码中移动它时,它不能与 有人成功使用db.eval()方法吗?