小编Lee*_*Lee的帖子

MongoDB中的数据类型转换

我有一个名为Document in MongoDB的集合.此集合中的文档具有以ISO日期类型存储的名为CreationDate的字段.我的任务是计算每天创建的文档数量,并按异步数量排序.输出格式必须是[{_id:'yyyy-MM-dd',cnt:x}].我尝试使用如下聚合框架.

db.Document.aggregate( 
    , {$project: {_id:1, Year:{$year:'$CreationDate'}, Month:{$month:'$CreationDate'}, Date:{$dayOfMonth:'$CreationDate'}}}
    , {$group: {_id:{$concat:['$Year', '-', '$Month', '-', '$Date']}, cnt:{$sum:1}}}
    , {$sort:{'cnt':-1}}
);
Run Code Online (Sandbox Code Playgroud)

代码给出了如下错误:

$concat only supports strings, not NumberInt32
Run Code Online (Sandbox Code Playgroud)

我明白这是因为$ year,$ month和$ dayOfMonth都返回了数字.可以将_id字段组合为对象,并在应用程序级别以所需格式重新格式化它.

但从技术角度来看,我有两个问题:

  1. 如何在MongoDB shell中将数字转换为字符串?在这种情况下,$ year的输出可以转换为字符串并在$ concat中使用.

  2. 有没有更好的方法将ISODate输出格式化为各种日期格式?在许多情况下,我们只需要ISODate的某些部分,例如:日期组件或时间部分.是否有任何MongoDb内置运营商来实现这一目标?

提前感谢任何建议.

mongodb mongodb-query aggregation-framework

25
推荐指数
2
解决办法
1万
查看次数

按层次结构和名称对层次结构对象进行排序

我有一组嵌套对象:

[
    {_id:1, parent:0, name:'Z'},
    {_id:4, parent:0, name:'A'},
    {_id:2, parent:1, name:'H'},    
    {_id:8, parent:2, name:'G'},        
    {_id:5, parent:4, name:'M'},
    {_id:6, parent:4, name:'N'},
    {_id:3, parent:1, name:'Z'},
    {_id:7, parent:2, name:'L'}
]
Run Code Online (Sandbox Code Playgroud)

我需要对它们进行排序,因为同一级别的节点将按字母顺序排序(asc/desc可配置),并且所有子节点应该在它们的父节点之后,并且在它们的父节点之间的节点也按字母顺序排序.

例如,如果按asc排序,则输出应为

[ 
    { _id: 4, parent: 0, name: 'A' },
    { _id: 5, parent: 4, name: 'M' },
    { _id: 6, parent: 4, name: 'N' },
    { _id: 1, parent: 0, name: 'Z' },
    { _id: 2, parent: 1, name: 'H' },
    { _id: 8, parent: 2, name: 'G' },
    { _id: …
Run Code Online (Sandbox Code Playgroud)

javascript arrays sorting algorithm quicksort

10
推荐指数
2
解决办法
2919
查看次数

MongoDB db.collection.save在存在时覆盖对象

在MongoDB中,您可以使用它db.collection.save({_id:'abc'}, objectToSave)来执行upsert.

我们将objectToSave定义如下

{_id:'abc', field1:1, field2:2};
Run Code Online (Sandbox Code Playgroud)

在我的收藏中,我已经拥有一个具有相同_id值的文档,如下所示:

{_id:'abc', field3:3};
Run Code Online (Sandbox Code Playgroud)

上面的保存功能将替换集合中的现有文档

{_id:'abc', field1:1, field2:2};
Run Code Online (Sandbox Code Playgroud)

我想要的是执行$ set操作来生成集合中的一些文档,如下所示

{_id:'abc', field1:1, field2:2, field3:3};
Run Code Online (Sandbox Code Playgroud)

这可以在保存功能中实现,还是我必须编写单独的更新语句?

请注意,objectToSave的字段是动态的.我正在使用的语言是Node.JS.

mongodb

9
推荐指数
1
解决办法
7858
查看次数

NodeJS子进程标准输出是所有数字

我正在编写一些node.js脚本来启动子进程.代码段如下.

var spawn = require('child_process').spawn; 
var child = spawn ('node', ['script.js'])

child.stdout.on('data', 
    function (data) {
        logger.verbose('tail output: ' + JSON.stringify(data));
    }
);

child.stderr.on('data',
    function (data) {
        logger.error('err data: ' + data);
    }
);
Run Code Online (Sandbox Code Playgroud)

脚本运行良好,除了子进程的stdout和stderr只打印数字输出:

样本输出:

   108,34,44,34,105,110,99,114,101,97,109,101,110,116,97,108,95,112,111,108,108,105
Run Code Online (Sandbox Code Playgroud)

如何将这些数值转换为可读字符串?

谢谢.

stdout child-process node.js

9
推荐指数
1
解决办法
876
查看次数

NodeJS winston日志文件在大小限制时不会更改

我正在使用Winston日志记录,并指定文件大小最大为10MB.

{
    filename: 'e:\app.log', 
    json:false, 
    maxsize:'10MB', 
    maxFiles:'10', 
    timestamp:true, 
    level:'silly'
}
Run Code Online (Sandbox Code Playgroud)

我希望app.log文件在大小达到10MB时轮换,但这从未发生过,我的日志文件增长到甚至GB.

有什么我做错了吗?谢谢.

node.js winston

8
推荐指数
1
解决办法
7222
查看次数

Jade模板:如何在UL中创建超链接,并对超链接进行描述

我正在尝试创建一个包含超链接的列表.每个列表项在一行中包含主题和对该主题的简单描述.我想要包含主题的超链接,但不包括描述.我的所作所为如下.

ul#subjects
    li
        a(href="#") Subject: Here is the description of the subject
Run Code Online (Sandbox Code Playgroud)

链接工作正常但它涵盖了整行文本.如何关闭超链接,使其在HTML中变为如下所示?请注意,超链接不包含":".

<ul id='subjects'>
    <li><a href='#'>Subject</a>: Here is is the description of the subject
</ul>
Run Code Online (Sandbox Code Playgroud)

谢谢.:)

node.js pug

4
推荐指数
1
解决办法
5807
查看次数

将所有python函数参数转换为json的快速方法

假设我有一个定义如下的函数。

def func(param1, param2, param3, param4, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

我想要实现的是获取一个 json 对象,如下所示

{
    "param1":param1, 
    "param2":param2, 
    "param3": param3, 
    "param4": param4, 
    "args":args, 
    "kwargs":kwargs
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以在函数中手动编写这个 json 对象,但只是想知道是否有任何快速方法可以以编程方式执行此操作,而不必担心更改参数名称、添加/删除参数等。

我还试图避免仅仅使用*argsand ,**kwargs因为我仍然想保持使用位置参数的不言自明的好处。

python json

3
推荐指数
1
解决办法
1409
查看次数

在NodeJS中,如何从具有不同字段名称的mongodb输出结果?

我正在使用nodejs来查询mongodb,并希望输出带有自定义字段名称的json.

例如,来自MongoDB的原始json可能

    {id:1, text:"abc"}
Run Code Online (Sandbox Code Playgroud)

我想输出它

    {ObjectID:1, DisplayText:"abc"};
Run Code Online (Sandbox Code Playgroud)

我知道MongoDB在其聚合框架中有$ project运算符,但不确定如何在NodeJS中使用它们.

我正在使用的mongodb nodejs包

    var mongo = require('mongodb');
    var monk = require('monk');
    var db = monk('server:port/mydb');
Run Code Online (Sandbox Code Playgroud)

对此提出任何建议.

javascript mongodb node.js aggregation-framework monk

2
推荐指数
1
解决办法
2363
查看次数

JavaScript/Node.JS 中的变量声明和初始化

我在 JavaScript 中看到了不同的编码格式/样式推荐。其中之一是在每行末尾省略,;,除非,在 JSON 对象中使用 。另一种是仅var用于声明变量并缩进第二个变量。

我采纳了这两个建议,这给我带来了一个有趣的错误,我想深入了解这个问题。

初始化

var max = 2
    arr = []
    wait = 10

//Preset arr with simple object {id:i}
for(var i = 0; i < max; i++) arr.push({id:i})
Run Code Online (Sandbox Code Playgroud)

主功能

function simulate(idIn, callback) {
    var msg = idIn 
        id = idIn

    logger.info(idIn, 'simulate', JSON.stringify({id:id, idIn:idIn}))
    setTimeout(function() {
        var obj = {id:id, idIn:idIn}
        logger.info(idIn, 'init', JSON.stringify(obj))
        callback()
    }, wait)
}
Run Code Online (Sandbox Code Playgroud)

并行执行

async.map(arr, function(item, cb) {
    logger.info('map', JSON.stringify(item))
    simulate(item.id, cb) …
Run Code Online (Sandbox Code Playgroud)

javascript variables scope node.js

2
推荐指数
1
解决办法
6291
查看次数

如何在python中减少元组列表

我有一个数组,我想计算数组中每个项目的出现。

我已经设法使用地图功能来产生元组列表。

def mapper(a):
    return (a, 1)

r = list(map(lambda a: mapper(a), arr));

//output example: 
//(11817685, 1), (2014036792, 1), (2014047115, 1), (11817685, 1)
Run Code Online (Sandbox Code Playgroud)

我期望reduce函数可以帮助我按每个元组中的第一个数字(id)对计数进行分组。例如:

(11817685, 2), (2014036792, 1), (2014047115, 1)
Run Code Online (Sandbox Code Playgroud)

我试过了

cnt = reduce(lambda a, b: a + b, r);
Run Code Online (Sandbox Code Playgroud)

和其他一些方法,但是他们都无法解决问题。

注意 感谢您提供有关解决问题的其他方法的所有建议,但是我只是在学习Python以及如何在此处实现map-reduce,并且为了使您易于理解,我对我的实际业务问题进行了很多简化,所以请请向我展示进行map-reduce的正确方法。

python mapreduce python-2.7

2
推荐指数
1
解决办法
1502
查看次数

如何从主 github 操作 yaml 文件引用另一个 yml 文件?

我正在定义一个引用另一个 yaml 文件的 github 操作脚本,希望能够以更有条理的方式进行配置。

\n

这是我的作业文件,命名为deploy.yml的路径./.github/workflows/,其中第一个.是我的项目的根文件夹。

\n
....\njobs:\n  UnitTest:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n      - uses: ./.github/workflows/unittest.yml\n
Run Code Online (Sandbox Code Playgroud)\n

在同一./.github/workflows/文件夹中,我创建了另一个文件,名称unittest.yml如下:

\n
name: "UnitTest"\ndescription: "Perform Unit Test"\nruns:\n  # using: "composite"\n  - name: Dependency\n    run: |\n      echo "Dependency setup commands go here"\n\n  - name: UnitTest\n    run: make test.unit\n
Run Code Online (Sandbox Code Playgroud)\n

但是,当我尝试使用act with command在本地测试脚本时act --secret-file .secrets --container-architecture linux/amd64,收到以下错误:

\n
[Deploy/UnitTest]   \xe2\x9c\x85  Success - Main actions/checkout@v3\n[Deploy/UnitTest] \xe2\xad\x90 Run Main ./.github/workflows/unittest.yml\n[Deploy/UnitTest]   \xe2\x9d\x8c  Failure …
Run Code Online (Sandbox Code Playgroud)

continuous-integration yaml github-actions

2
推荐指数
1
解决办法
3840
查看次数

NodeJS:具有传统查询字符串格式的route.get

我正在使用express来重定向我的Web请求.我的一个Web请求包含三个可选参数,所以我有

router.get('/function/:param1?/:param2?/:param3?', function(req, res) {...}); 
Run Code Online (Sandbox Code Playgroud)

我的问题是,因为所有这三个参数都是可选的而不是相互依赖.例如,用户只能提供param3.在当前实现中,由于路由器格式中嵌入的序列,param3将被分配给param1变量.

如何实现如下所示的内容?

router.get('/function?param1=$1&param2=$2&param3=$3', function(req, res){...});
Run Code Online (Sandbox Code Playgroud)

node.js

1
推荐指数
1
解决办法
2250
查看次数