我有两个Mongoose模型:一个用于事务,另一个用于与之关联的标记.为了实现一些报告,我需要像这样的聚合代码:
Transaction.aggregate([
{ $unwind: '$tags' },
{
$group: {
_id: '$tags',
amount: {
$sum: '$amount'
}
}
}
])
Run Code Online (Sandbox Code Playgroud)
这会产生包含_id和的输出amount.现在,我想name从模型中填充其他字段(例如),保留计算amount列.我能在一个简单的内容中做到populate吗?
我描述的模型的模式:
var TransactionSchema = new Schema({
description: {
type: String,
trim: true
},
amount: {
type: Number,
required: 'Forneça um valor',
},
date: {
type: Date,
required: 'Forneça uma data',
default: Date.now
},
fromOfx: {
type: Boolean,
default: false
},
created: {
type: Date,
default: Date.now
},
correlated: …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个可以同时进行eazygnuplot:plot多个系列的宏.理想情况下,我想写的东西一样(plotlists lists),这里lists看起来是这样的:
'(((57 91)) ((83 1) (90 8) (78 18)) ((42 19)))
Run Code Online (Sandbox Code Playgroud)
也就是说,lists是一k对列表的列表(更具体地说,这是一个平面上的点列表,在用k均值聚类之后).我提到的宏应该扩展成类似的东西:
(eazy-gnuplot:plot (lambda ()
(dolist (p l1)
(format t "~&~A ~A" (first p) (second p)))))
(eazy-gnuplot:plot (lambda ()
(dolist (p l2)
(format t "~&~A ~A" (first p) (second p)))))
Run Code Online (Sandbox Code Playgroud)
......等等.我的想法是写这样的东西:
(defmacro plotlists (lists)
`(progn ,@(mapcar #'(lambda (ll)
'(eazy-gnuplot:plot
(lambda ()
(dolist (p ll)
(format t "~&~A ~A" (first p) (second p))))))
lists)))
Run Code Online (Sandbox Code Playgroud)
该宏由这样的函数调用scatter:
(defun scatter (lists) …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个破坏性地N从列表中删除元素并返回它们的函数.我提出的代码(见下文)看起来很好,除了SETF不按我想要的方式工作.
(defun pick (n from)
"Deletes (destructively) n random items from FROM list and returns them"
(loop with removed = nil
for i below (min n (length from)) do
(let ((to-delete (alexandria:random-elt from)))
(setf from (delete to-delete from :count 1 :test #'equal)
removed (nconc removed (list to-delete))))
finally (return removed)))
Run Code Online (Sandbox Code Playgroud)
对于大多数情况,这很好用:
CL-USER> (defparameter foo (loop for i below 10 collect i))
CL-USER> (pick 3 foo)
(1 3 6)
CL-USER> foo
(0 2 4 5 7 8 …Run Code Online (Sandbox Code Playgroud)