我在mongoDB中使用聚合方法进行分组,但当我使用$group
时,它返回我用于分组的唯一字段。我试过$project
,但它也不起作用。我还尝试了$first
,它成功了,但结果数据现在的格式不同了。
我需要的响应格式如下:
{
"_id" : ObjectId("5b814b2852d47e00514d6a09"),
"tags" : [],
"name" : "name here",
"rating" : "123456789"
}
在我的查询中添加$group之后。响应是这样的,_id的值会发生变化。(而且$group只接受_id,如果我尝试任何其他关键字,它会抛出一个累加器错误。请解释一下。)
{
"_id" :"name here" //the value of _id changed to the name field which i used in $group condition
}
我必须删除名称字段中的重复项,而不改变任何结构和字段。此外,我正在使用猫鼬的nodeJS,所以请提供使用它的解决方案。
当您在任何数据库上对数据进行分组时,这意味着您希望在所需字段上执行累积操作,而不包括在累积操作中的其他字段将用于分组
db.collection.aggregate([{
$group: {
_id: { field1: "", field1: "" },
acc: { $sum: 1 }
}}]
在这里_id对象将包含您想要保存的所有其他字段。
对于你的数据,你可以试试这个
db.collection.aggregate([{
$group: {
_id: "$name",
rating: { $first: "$rating" },
tags: { $first: "$tag" },
docid: { $first: "$_id" }
}
},
{
$project: {
_id: "$docid",
name: "$_id",
rating: 1,
tags: 1
}
}])
user2683814的解决方案对我很有效,但在我的例子中,当我们替换newRoot对象时,我有一个计数器累加器,计数字段在最后阶段丢失,所以我使用了$mergeObjects
操作符来取回我的计数字段。
db.collection.aggregate([
{
$group: {
_id: '$product',
detail: { $first: '$$ROOT' },
count: {
$sum: 1,
},
},
},
{
$replaceRoot: {
newRoot: { $mergeObjects: [{ count: '$count' }, '$detail'] },
},
}])
可以使用下面的聚合查询。
$$ROOT
按每个名称保留整个文档,后跟$replaceRoot
将文档提升到顶部。
db.col.aggregate([
{"$group":{"_id":"$name","doc":{"$first":"$$ROOT"}}},
{"$replaceRoot":{"newRoot":"$doc"}}
])
我正在尝试从下面的查询收集表格中获取数据: 但如果$match的集合中存在datat,则会导致空数据,但此slug的job\u活动不存在 有人能帮忙吗谢谢
问题内容: 在我的AJAX调用中,我想将字符串值返回到调用页面。 我应该使用还是返回一个字符串? 问题答案: 您可以使用返回一个纯字符串: 默认情况下返回a 作为其contentType。这是可重载的,因此您还可以执行以下操作:
我试图从一个网站刮数据练习网络刮。但是返回空集。我如何解决这个问题? 输出:
我正在创建,比如说,15个Callable任务,并提交它们: 然后我收集15个MyResult对象: 问题是:我没有从get()方法获得所有15个MyResult对象,而是有时获得不到15个对象。有时12有时10有时甚至更少,有时全部15。 我的印象是,方法是一个阻塞调用,将等待所有15个线程返回各自的结果,但看起来我错过了其中的一些线程并继续前进。我做错了什么?我是否未正确收集结果/等待结果?当
问题内容: 我被困在这里。我在Postgres中有这样的行: sql语法如何获得这样的结果? 问题答案:
我对promise不熟悉。我查找了按顺序执行promise的示例,但没有找到与我的应用程序类似的示例。 我的问题是,我想按照一定的顺序解决promise,但也要捕获promise解决时的所有结果。通过查找例子。我已经创建了这个问题的简化版本。 我能够创建一个函数doWork(),但问题是它所做的只是按顺序解决promise,而没有捕获结果。 理想情况下,我想要一个返回promise的函数,该函数将