小编Gui*_*rme的帖子

在Mongoose中填充+聚合

我有两个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)

mongoose mongodb node.js

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

宏:值不是LIST类型

我正在尝试编写一个可以同时进行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)

lisp macros sbcl common-lisp

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

在函数内部删除+ SETF

我正在尝试编写一个破坏性地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)

lisp common-lisp

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

标签 统计

common-lisp ×2

lisp ×2

macros ×1

mongodb ×1

mongoose ×1

node.js ×1

sbcl ×1