Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >mongodb从facet返回对象

mongodb从facet返回对象
EN

Stack Overflow用户
提问于 2018-08-07 03:22:14
回答 3查看 2.4K关注 0票数 7

是否有可能让facet以对象而不是数组的形式返回?如果需要访问result[0].total而不仅仅是result.total,这似乎有点违反直觉

代码(使用mongoose):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        Model
            .aggregate()
            .match({
                "name": { "$regex": name },
                "user_id": ObjectId(req.session.user.id),
                "_id": { "$nin": except }
            })
            .facet({
                "results": [
                    { "$skip": start },
                    { "$limit": finish },
                    {
                        "$project": {
                            "map_levels": 0,
                            "template": 0
                        }
                    }
                ],
                "total": [
                    { "$count": "total" },
                ]
            })
            .exec() 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-07 05:01:30

使用$facet得到的每个字段代表单独的聚合管道,这就是为什么总是得到一个数组的原因。您可以使用$addFields用单个元素覆盖已有的total。要获得第一个项目,您可以使用$arrayElemAt

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Model
    .aggregate()
    .match({
        "name": { "$regex": name },
        "user_id": ObjectId(req.session.user.id),
        "_id": { "$nin": except }
    })
    .facet({
        "results": [
            { "$skip": start },
            { "$limit": finish },
            {
                "$project": {
                    "map_levels": 0,
                    "template": 0
                }
            }
        ],
        "total": [
            { "$count": "total" },
        ]
    })
    .addFields({
        "total": {
            $arrayElemAt: [ "$total", 0 ]
        }
    })
    .exec()
票数 5
EN

Stack Overflow用户

发布于 2018-08-07 06:20:33

你也可以试试这个

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Model
.aggregate()
.match({
  "name": { "$regex": name },
  "user_id": ObjectId(req.session.user.id),
  "_id": { "$nin": except }
})
.facet({
  "results": [
    { "$skip": start },
    { "$limit": finish },
    {
      "$project": {
        "map_levels": 0,
        "template": 0
      }
    }
  ],
  "total": [
    { "$count": "total" },
  ]
})
.addFields({
  "total": {
    "$ifNull": [{ "$arrayElemAt": [ "$total.total", 0 ] }, 0]
  }
})
.exec()
票数 3
EN

Stack Overflow用户

发布于 2021-04-08 13:10:38

假设您想要将$facet的结果传递到下一阶段,假设是$match。$match接受文档数组作为输入,并返回与表达式匹配的文档数组,如果$facet的输出只是一个元素,我们就不能将其输出传递给$match,因为$facet的输出类型与$match的输入类型不同($match只是一个例子)。在我看来,最好将$facet的输出保存为数组,以避免处理这些类型的情况。

附言:我所说的并不是官方的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51718370

复制
相关文章
ticket是啥意思_ticket中文
大家好,又见面了,我是你们的朋友全栈君。 <?php header(“Content-Type:text/html;charset=utf8”); $ee = urlencode(“gQFI8DoAA
全栈程序员站长
2022/09/20
8060
拣货单Picket Ticket
您有没有想过,仓库是如何运作的?它需要如何组织,每个人才都能得到他们订购的物品? 那么,我们如何实现呢? 答案就是使用拣货单(Picket Ticket), 你可能会发现拣货单(Picket Tick
知行软件EDI
2021/02/25
1.4K0
拣货单Picket Ticket
检测js错误
-在 app.module.ts 中配置 FundebugErrorHandler
用户1437675
2018/08/20
3.6K0
【微信开发】 使用单例设计模式 提供AccessToken 和Jsapi_ticket缓存支持
上一篇 是使用ecache 做的缓存, 有些简单的微信项目并不需要这么复杂,所以就想到单例设计模式  首先,我们先定义一个单例对象 import java.util.HashMap; import java.util.Map; /**  *   * @author wangiegie  * @date 2015年9月29日下午8:13:06  * @description  */ public class Singleton { //缓存accessToken 的Map  ,map中包含 一个access
冷冷
2018/02/08
7740
微信公众号开发——2、微信网页开发
在公众号平台下,自定义菜单,添加菜单,并选择菜单内容跳转到指定页面地址即可(需认证后方可添加页面地址,个人账号暂不支持认证)。
全栈程序员站长
2022/09/01
7.3K0
滑块验证获取ticket教程
文章目录 前言 第一步 第二步 第三步 第四步 第五步 ---- 前言 个人备忘录 ---- 第一步 首先获取滑块验证码的地址, 并在浏览器中打开. 这里以 Microsoft Edge 浏览器为例 第二步 此时不要滑动验证码, 按下f12打开 开发者工具 第三步 ①点击 网络(Network) ②勾选 筛选器(Filder) ③保留日志(Preserve log) ④此时可以滑动并通过验证码 第四步 点击 第五步 复制 ticket 字段并回到服务器粘贴回车。
MIKE笔记
2023/03/22
5K0
滑块验证获取ticket教程
js setTimeout 错误捕获
封装为 promise,通过 promise.catch 捕获,或 promise 全局错误捕获
蓓蕾心晴
2022/12/18
2.8K0
js常见错误总结
alert 需要等到alert弹出框,点击确定关闭后,后面的代码才执行 – alert会阻碍住线程的渲染 alert弹出的内容都会默认转换为字符串 – 调用toString 其他类型转数字类型 字符串转数字 空字符串转数字=>0 Symbol转数字 不能把Symbol类型转换为数字,否则报错 parseFloat、parseInt parseFloat比parseInt多识别一位小数点 字符串拼接 只要加号两边的任意一边出现字符串,则变为字符串拼接 对象转数字时需要先转换为字符串,变为字符串之后则直接拼接,
IT工作者
2021/12/29
1.6K0
js常见错误总结
var声明的变量即是全局变量,也相当于给GO(window)设置了一个属性,而且两者建立映射机制
IT工作者
2021/12/30
1.9K0
黄金票据(Golden Ticket)攻击
大家好,这里是 渗透攻击红队 的第 37 篇文章,本公众号会记录一些我学习红队攻击的复现笔记(由浅到深),不出意外每天一更
渗透攻击红队
2020/12/14
3.8K0
js自定义错误
JavaScript提供了8个error对象,根据错误类型在try/catch表达式中抛出这些错误对象。
IT工作者
2022/01/06
3.6K0
HDOJ/HDU 1133 Buy the Ticket(数论~卡特兰数~大数~)
Problem Description The “Harry Potter and the Goblet of Fire” will be on show in the next few days
谙忆
2021/01/21
3890
打印机扫描smb错误_打印服务器错误不能提供打印
1、首先要检查打印机是否处于联机状态,如果打印机没有联机是无法进行工作的,检查打印机与电脑之间的连线是否正确。
全栈程序员站长
2022/11/03
4.7K0
白银票据(Silver Ticket)攻击
大家好,这里是 渗透攻击红队 的第 38 篇文章,本公众号会记录一些我学习红队攻击的复现笔记(由浅到深),不出意外每天一更
渗透攻击红队
2020/12/14
3.2K0
Linux 查看命令归属哪个包?Linux 查看linux 哪个包包含特定命令?fedora 查询哪个包提供特定命令;ubuntu 查找哪个包提供命令;
在 fedora 和 centos 等 redhat 系列中,命令: yum provides tc [root@dock ~]# yum provides tc iproute-tc-5.0.0-2.fc29.x86_64 : Linux Traffic Control utility Repo : @System Matched from: Provide : tc iproute-tc-5.0.0-2.fc29.x86_64 : Linux Traffic Control uti
西湖醋鱼
2020/12/30
2.8K0
开源客服工单系统 PESCMS Ticket
PESMCS Ticket(下称PT)是一款基于GPLv2协议发布的开源客服工单系统。PT以全新的设计理念,实现一句JS即可嵌入任意页面中,让工单系统变得更加轻便。
Lcry
2022/11/29
1.5K0
开源客服工单系统 PESCMS Ticket
票据传递(Pass The Ticket)攻击与利用
mimikatz 同样提供了不需要本地管理员权限进行横向渗透的方法,实现未授权访问,例如票据传递攻击(Pass The Ticket,PTT)
渗透攻击红队
2020/11/25
3.2K0
票据传递(Pass The Ticket)攻击与利用
点击加载更多

相似问题

离开命令不一致JS

10

不一致JS:部署命令

114

添加角色命令不一致,js

230

提供角色的Discord.js命令

46

未处理不一致的JS命令

17
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文