我需要使用 $cond 来组合不同的列,我需要写的一个 $cond 如下:
create_widget: {
$sum:{
$cond:[{$and: [ {$eq: ['$Method', 'POST']},
{Url:{$regex: /.*\/widgets$/}} ]}, 1, 0]
}
}
Run Code Online (Sandbox Code Playgroud)
而且这段代码不对,好像正则表达式不能放在这里。有没有其他方法可以做到这一点?我想匹配 Url 和正则表达式并将代码放在 $cond 下。
示例数据看起来像
{"BrandId":"a","SessionId":"a1","Method":"POST","Url":"/sample/widgets"}
{"BrandId":"a","SessionId":"a2","Method":"POST","Url":"/sample/blog"}
{"BrandId":"b","SessionId":"b1","Method":"PUT","Url":"/sample/widgets"}
Run Code Online (Sandbox Code Playgroud)
我写的整个代码如下:
db.tmpAll.aggregate([
{$group: {
_id: {BrandId:'$BrandId'},
SessionId: {$addToSet: '$SessionId'},
create_widget: {
$sum:{
$cond:[{$and: [ {$eq: ['$Method', 'POST']},
{} ]}, 1, 0]
}
}
}},
{$group: {
_id: '$_id.BrandId',
distinct_session: {$sum: {$size: '$SessionId'}},
create_widget: {$sum: '$create_widget'}
}}
]);
Run Code Online (Sandbox Code Playgroud)
示例代码的预期结果是
{ "_id" : "a", "distinct_session" : 2, "create_widget" : 1 }
{ "_id" …Run Code Online (Sandbox Code Playgroud) 我的数据集看起来像
{"BrandId":"a","SessionId":100,"UserName":"tom"}
{"BrandId":"a","SessionId":200,"UserName":"tom"}
{"BrandId":"b","SessionId":300,"UserName":"mike"}
Run Code Online (Sandbox Code Playgroud)
我想用brandid计算不同的会话和用户名组,示例sql如下:
select brandid,count_distinct(sessionid),count_distinct(username)
from data
group by brandid
Run Code Online (Sandbox Code Playgroud)
我试着编写Mongo DB,我当前的代码如下,它不起作用.反正有没有让它工作?
db.logs.aggregate([
{$group:{
_id:{brand:"$BrandId",user:"$UserName",session:"$SessionId"},
count:{$sum:1}}},
{$group:{
_id:"$_id.brand",
users:{$sum:"$_id.user"},
sessions:{$sum:"$_id.session"}
}}
])
Run Code Online (Sandbox Code Playgroud)
对于某个例子,预期的数量是
{"BrandId:"a","countSession":2,"countUser":1}
{"BrandId:"b","countSession":1,"countUser":1}
Run Code Online (Sandbox Code Playgroud)
如果您了解SQL,则期望结果与我提到的SQL相同.
我有调用http.delete并传递参数标志的函数:
function softDeleteDatasource(datasourceId,flag) {
var url = baseUrl + datasourceId;
return $http.delete(url, {'currentFieldSetFlag':flag});
}
Run Code Online (Sandbox Code Playgroud)
然后我假设我可以使用以下代码获取req.body.但是,我总是undefined在console.log.我使用完全相同的代码http.post,它在传递参数时工作正常.
var bodyParser = require('body-parser');
var jsonParser = bodyParser.json();
router.delete('/:datasourceId', jsonParser, function(req, res) {
console.log(req.body.currentFieldSetFlag);
}
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么相同的代码不能传递参数http.delete?谁知道怎么通过呢?
我有一个数据集看起来像
{"BrandId":"a","SessionId":100,"Method": "POST"}
{"BrandId":"a","SessionId":200,"Method": "PUT"}
{"BrandId":"a","SessionId":200,"Method": "GET"}
{"BrandId":"b","SessionId":300,"Method": "GET"}
Run Code Online (Sandbox Code Playgroud)
我通过brandid写了聚合计数不同的会话ID:
db.collection.aggregate([
{$group: {
"_id": {
brand: "$BrandId",
session: "$SessionId"
},
count: {$sum: 1}
}},
{$group: {
_id: "$_id.brand",
countSession:{$sum:1}
}}
])
Run Code Online (Sandbox Code Playgroud)
该查询的预期结果是:
{ "_id" : "a", "countSession" : 2 }
{ "_id" : "b", "countSession" : 1 }
Run Code Online (Sandbox Code Playgroud)
另一个查询是按品牌计数方法在POST的位置:
db.collection.aggregate([
{$match: {Method:"POST"}},
{$group: {
_id: '$BrandId',
countPOST:{$sum:1}
}}
])
Run Code Online (Sandbox Code Playgroud)
预期结果:
{ "_id" : "a", "countPOST" : 1 }
{ "_id" : "b", "countSession" : 0 }
Run Code Online (Sandbox Code Playgroud)
现在,我想结合这两个查询并获得预期的结果,如下所示:
{"BrandId:"a","countSession":2,"countPOST":1}
{"BrandId:"b","countSession":1,"countPOST":0}
Run Code Online (Sandbox Code Playgroud)
我不怎么将两个聚合的这两个结果结合起来,谁能帮忙?
import org.springframework.beans.factory.annotation.Value;
Run Code Online (Sandbox Code Playgroud)
我使用spring @ value从配置中获取值,它在其他类(控制器和其他服务)中也能正常工作,但在模型中不起作用:
public final class Page {
@Value("${defaultUrl}")
private static String defaultUrl;
private String url;
public Page(String url) {
this.url = url;
}
public Page() {
this(defaultUrl);
}
}
Run Code Online (Sandbox Code Playgroud)
在上述情况下,无法从Spring.value获取defaultUrl。有人知道为什么吗?