如何格式化 mongodb find 查询的结果?
Posted
技术标签:
【中文标题】如何格式化 mongodb find 查询的结果?【英文标题】:How to format the result of a mongodb find query? 【发布时间】:2013-06-09 22:43:08 【问题描述】:我有一个以这种格式存储数据的集合:
_id: ObjectId("51b9be6dbbdeef1e5f008cca"),
name: 'sfdsfsdfsdfsdfsd'
details:
varA:
created: "2013-06-13T12:43:25.853Z",
validity: "2013-07-13T12:43:25.853Z",
modified: "2013-06-13T12:43:25.853Z"
,
varB:
created: "2013-06-13T12:43:25.853Z",
validity: "2013-07-13T12:43:25.853Z",
modified: "2013-06-13T12:43:25.853Z"
我希望能够以这种格式仅公开 varA 数据(没有嵌套深度...):
_id: ObjectId("51b9be6dbbdeef1e5f008cca"),
name: 'sfdsfsdfsdfsdfsd',
created: "2013-06-13T12:43:25.853Z",
validity: "2013-07-13T12:43:25.853Z",
modified: "2013-06-13T12:43:25.853Z"
不幸的是,我的查询(我正在使用投影):
db.coll.find(, 'details.varB': 0)
返回类似这样的内容:
_id: ObjectId("51b9be6dbbdeef1e5f008cca"),
name: 'sfdsfsdfsdfsdfsd',
details:
varA:
created: "2013-06-13T12:43:25.853Z",
validity: "2013-07-13T12:43:25.853Z",
modified: "2013-06-13T12:43:25.853Z"
如何改进查找查询以返回预期格式?
非常感谢那些会帮助我的人;-)
附:这里我使用 mongo shell 来检索数据,但我需要让这个查询与 node.js 和 node-mongodb-native 一起工作。
【问题讨论】:
我建议你考虑在客户端(在 NodeJS 中)做那些忙碌的工作,而不是让数据库服务器做额外的工作来以不同的格式投影数据。 【参考方案1】:正如我的博文here 中所解释的那样,我仅使用聚合函数完成了此操作
对于你的情况,这是可行的
db.temp.aggregate (
$project :
name:"$name",
created:"$details.varA.created",
validity:"$details.varA.validity",
modified:"$details.varA.modified"
);
或
db.temp.aggregate ($project:name:"$name",created:"$details.varA.created",validity:"$details.varA.validity",modified:"$details.varA.modified");
这是示例运行
> db.temp.insert (name:'sfdsfsdfsdfsdfsd', details: varA : created: "2013-06-13T12:43:25.853Z", validity: "2013-07-13T12:43:25.853Z", modified: "2013-06-13T12:43:25.853Z", varB : created: "2013-06-13T12:43:25.853Z", validity: "2013-07-13T12:43:25.853Z", modified: "2013-06-13T12:43:25.853Z" )
> db.temp.aggregate ($project:name:"$name",created:"$details.varA.created",validity:"$details.varA.validity",modified:"$details.varA.modified");
"result" : [
"_id" : ObjectId("51b9d7151723a9c4d6bc9936"),
"name" : "sfdsfsdfsdfsdfsd",
"created" : "2013-06-13T12:43:25.853Z",
"validity" : "2013-07-13T12:43:25.853Z",
"modified" : "2013-06-13T12:43:25.853Z"
],
"ok" : 1
【讨论】:
感谢@thefourtheye。这就是我一直在寻找的。有没有办法聚合这个查询的所有其他字段?我想在结果中显示集合中的另外 20 个字段,我应该在 $project 运算符中将它们全部列出吗? 是的。如果要在查询结果中展平或重命名标题,则必须提及所有字段名称。以上是关于如何格式化 mongodb find 查询的结果?的主要内容,如果未能解决你的问题,请参考以下文章