我有一个名为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字段组合为对象,并在应用程序级别以所需格式重新格式化它.
但从技术角度来看,我有两个问题:
如何在MongoDB shell中将数字转换为字符串?在这种情况下,$ year的输出可以转换为字符串并在$ concat中使用.
有没有更好的方法将ISODate输出格式化为各种日期格式?在许多情况下,我们只需要ISODate的某些部分,例如:日期组件或时间部分.是否有任何MongoDb内置运营商来实现这一目标?
提前感谢任何建议.
我有一组嵌套对象:
[
{_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) 在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.
我正在编写一些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)
如何将这些数值转换为可读字符串?
谢谢.
我正在使用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.
有什么我做错了吗?谢谢.
我正在尝试创建一个包含超链接的列表.每个列表项在一行中包含主题和对该主题的简单描述.我想要包含主题的超链接,但不包括描述.我的所作所为如下.
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)
谢谢.:)
假设我有一个定义如下的函数。
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因为我仍然想保持使用位置参数的不言自明的好处。
我正在使用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 中看到了不同的编码格式/样式推荐。其中之一是在每行末尾省略,和;,除非,在 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) 我有一个数组,我想计算数组中每个项目的出现。
我已经设法使用地图功能来产生元组列表。
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的正确方法。
我正在定义一个引用另一个 yaml 文件的 github 操作脚本,希望能够以更有条理的方式进行配置。
\n这是我的作业文件,命名为deploy.yml的路径./.github/workflows/,其中第一个.是我的项目的根文件夹。
....\njobs:\n UnitTest:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v3\n - uses: ./.github/workflows/unittest.yml\nRun Code Online (Sandbox Code Playgroud)\n在同一./.github/workflows/文件夹中,我创建了另一个文件,名称unittest.yml如下:
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\nRun Code Online (Sandbox Code Playgroud)\n但是,当我尝试使用act with command在本地测试脚本时act --secret-file .secrets --container-architecture linux/amd64,收到以下错误:
[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) 我正在使用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¶m2=$2¶m3=$3', function(req, res){...});
Run Code Online (Sandbox Code Playgroud)