首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >mongodb检查是否存在值(node.js)

mongodb检查是否存在值(node.js)
EN

Stack Overflow用户
提问于 2015-03-30 11:57:13
回答 1查看 11K关注 0票数 5

我使用Node.js和Mongo(mongodb驱动程序)向集合添加项。我有一个html站点,它使用socket.io将信息传递给页面。我可以插入到db中,但是当我试图查看值是否存在时,我会从Mongo得到一个奇怪的返回。我发送了一个名字,并试图把它放在客户的集合。到目前为止,我得到的是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
socket.on('DB', function(msg)
    {
        if(msg.Status == "Read")
        {
            MongoClient.connect(url, function(err, db)  //connect to mongo
            {
                var collection = db.collection('Clients');  // get reference to the collection
                collection.find(({Name: msg.Name},{$exists: true}), function(err, doc) //find if a value exists
                {     
                    if(doc) //if it does
                    {
                        console.log(doc); // print out what it sends back
                    }
                    else if(!doc) // if it does not 
                    {
                        console.log("Not in docs");
                    }
                });
              db.close();
            });

            }
}

这会让我觉得:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ connection: null,
  server: null,
  disconnectHandler:
   { s: { storedOps: [], storeOptions: [Object], topology: [Object] },
     length: [Getter] },
  bson: {},
  ns: 'DB.Clients',
  cmd:
   { find: 'DB.Clients',
     limit: 0,
     skip: 0,
     query: { '$exists': true },
     slaveOk: true,
     readPreference: { preference: 'primary', tags: undefined, options: undefined } },
  options:
   { skip: 0,
     limit: 0,
     raw: undefined,
     hint: null,
     timeout: undefined,
     slaveOk: true,
     readPreference: { preference: 'primary', tags: undefined, options: undefined },
     db:
      { domain: null,
        _events: {},
        _maxListeners: 10,
        s: [Object],
        serverConfig: [Getter],
        bufferMaxEntries: [Getter],
        databaseName: [Getter],
        options: [Getter],
        native_parser: [Getter],
        slaveOk: [Getter],
        writeConcern: [Getter] },
     disconnectHandler: { s: [Object], length: [Getter] } },
  topology:
   { domain: null,
     _events:
      { reconnect: [Function],
        timeout: [Object],
        error: [Object],
        close: [Object],
        destroy: [Object] },
     _maxListeners: 10,
     s:
      { options: [Object],
        callbacks: [Object],
        logger: [Object],
        state: 'connected',
        reconnect: true,
        reconnectTries: 30,
        reconnectInterval: 1000,
        emitError: true,
        currentReconnectRetry: 30,
        ismaster: [Object],
        readPreferenceStrategies: undefined,
        authProviders: [Object],
        id: 5,
        tag: undefined,
        disconnectHandler: [Object],
        wireProtocolHandler: {},
        Cursor: [Object],
        bsonInstance: {},
        bson: {},
        pool: [Object],
        serverDetails: [Object] },
     name: [Getter],
     bson: [Getter],
     wireProtocolHandler: [Getter],
     id: [Getter] },
  cursorState:
   { cursorId: null,
     documents: [],
     cursorIndex: 0,
     dead: false,
     killed: false,
     init: false,
     notified: false,
     limit: 0,
     skip: 0,
     batchSize: 1000,
     currentLimit: 0,
     transforms: undefined },
  callbacks: null,
  logger: { className: 'Cursor' },
  _readableState:
   { highWaterMark: 16384,
     buffer: [],
     length: 0,
     pipes: null,
     pipesCount: 0,
     flowing: false,
     ended: false,
     endEmitted: false,
     reading: false,
     calledRead: false,
     sync: true,
     needReadable: false,
     emittedReadable: false,
     readableListening: false,
     objectMode: true,
     defaultEncoding: 'utf8',
     ranOut: false,
     awaitDrain: 0,
     readingMore: false,
     decoder: null,
     encoding: null },
  readable: true,
  domain: null,
  _events: {},
  _maxListeners: 10,
  s:
   { maxTimeMS: null,
     numberOfRetries: 5,
     tailableRetryInterval: 500,
     currentNumberOfRetries: 5,
     state: 0,
     streamOptions: {},
     bson: {},
     ns: 'DB.Clients',
     cmd:
      { find: 'DB.Clients',
        limit: 0,
        skip: 0,
        query: [Object],
        slaveOk: true,
        readPreference: [Object] },
     options:
      { skip: 0,
        limit: 0,
        raw: undefined,
        hint: null,
        timeout: undefined,
        slaveOk: true,
        readPreference: [Object],
        db: [Object],
        disconnectHandler: [Object] },
     topology:
      { domain: null,
        _events: [Object],
        _maxListeners: 10,
        s: [Object],
        name: [Getter],
        bson: [Getter],
        wireProtocolHandler: [Getter],
        id: [Getter] },
     topologyOptions:
      { socketOptions: {},
        auto_reconnect: true,
        host: 'localhost',
        port: 27017,
        cursorFactory: [Object],
        reconnect: true,
        emitError: true,
        size: 5,
        disconnectHandler: [Object],
        bson: {},
        messageHandler: [Function],
        wireProtocolHandler: {} } },
  timeout: false,
  sortValue: undefined,
  readPreference: { preference: 'primary', tags: undefined, options: undefined } }

,并且无论是否存在具有名称的文档,当我在cli中运行它时,它都会返回。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> db.Clients.find({Name: 'say what'}, {$exists: true})
{ "_id" : ObjectId("5519a66eb85de65c121182d9") }

这表明文档是存在的,如果我对一个不是mongo的文档运行相同的cmd,它将什么也不返回。是否在返回语句中找到一个引用,说明文档是否存在?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-30 12:09:04

MongoDB find()方法向匹配查询条件的文档返回cursor。所以您在console.log(doc)中看到的实际上是返回的游标。当find()方法“返回文档”时,该方法实际上是将光标返回到文档。

您需要将一个toArray()方法添加到来自find()方法的结果游标中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var collection = db.collection('Clients');  // get reference to the collection
collection.find({Name: msg.Name}, {$exists: true}).toArray(function(err, docs) //find if documents that satisfy the criteria exist
{     
    if(docs.length > 0) //if exists
    {
        console.log(docs); // print out what it sends back
    }
    else // if it does not 
    {
        console.log("Not in docs");
    }
});

toArray()方法返回一个数组,该数组包含光标中的所有文档。该方法完全迭代游标,将所有文档加载到RAM中并耗尽游标。

编辑: docs是长度为0的数组。所以请检查数组的长度。

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

https://stackoverflow.com/questions/29355134

复制
相关文章
生信技巧 | GNU 并行操作
有些分析需要很长时间,因为它在单个处理器上运行并且有大量数据需要处理。如果数据可以分成块并单独处理,那么问题就被认为是可并行化的。
数据科学工厂
2023/09/20
2630
生信技巧 | GNU 并行操作
如何使用Spark大规模并行构建索引
使用Spark构建索引非常简单,因为spark提供了更高级的抽象rdd分布式弹性数据集,相比以前的使用Hadoop的MapReduce来构建大规模索引,Spark具有更灵活的api操作,性能更高,语法
我是攻城师
2018/05/14
1.5K0
jenkins并行构建
如果需要分别在Chrome、Firefox、IE等浏览器的各个不同版本中对同一个web应用进行UI测试,怎么做呢?
陈不成i
2021/06/01
1.7K0
使用 GNU Screen 的小技巧
对于一般用户而言,命令行终端窗口可能是令人困惑和神秘的。但随着你对 Linux 终端的进一步了解,你很快就会意识到它的高效和强大。不过,也不需要很长时间,你就会想让终端变得更加高效,除了将更多的终端放到你的终端,还有什么高好的方法能够提升你的终端效率呢?
用户1880875
2021/09/06
8220
如何构建用户体验优化体系?
在前几期的直播中,我们为大家介绍了监控和日志相关的一些内容。监控分为三个阶段,基础监控、应用监控、业务监控。前面我们已经分享了基础监控的部分,今天主要为大家带来用户体验优化的一些分享。
嘉为蓝鲸
2023/03/29
1.4K0
如何构建用户体验优化体系?
技术|使用 MinGW 在 Windows 上使用 GNU
在Windows上安装GNU编译器集合(gcc)和其他GNU组件来启用GNUAutotools。
知忆
2021/07/06
1.7K0
如何在庞大代码库上构建并行计算能力?
一、引言 对于商业数据库 [5] [6] [7]、开源数据库[8]、云原生数据库[9] [10] ,或者大数据系统[32],并行计算[33]都是多核处理环境下提高性能的基本技术手段。本文分析如何通过关键抽象来划分层次和管理复杂性,在庞大的 MySQL 代码库上构建并行计算能力,并通过基准测试数据来体现加速效果。 二、摘要 腾讯云托管数据库 TencentDB for MySQL [1] (本机存储,Binlog 复制集群) 和云原生数据库 TDSQL-C for MySQL [2] (共享存储, Red
腾讯云数据库 TencentDB
2023/03/30
5750
如何在庞大代码库上构建并行计算能力?
GreatSQL重磅特性,InnoDB并行并行查询优化测试
GreatSQL马上正式开源了,这次又新增了两个重磅特性:InnoDB事务锁优化 以及 InnoDB引擎的并行查询优化,这两个特性是由华为鲲鹏计算团队贡献的Patch合并而来。
老叶茶馆
2021/08/26
1.1K0
微服务模式下如何实现多模块并行构建发布
在微服务项目中具有很多个服务模块,为了便于管理需要将项目规范化,使用GitLabGroup管理整个项目,每个project对应一个微服务,每个微服务对应一个Jenkins job。开始发布的时候需要我们在手动选择各个服务然后发布。模块很多的时候就不太方便了。
DevOps云学堂
2020/04/22
1.1K0
微服务模式下如何实现多模块并行构建发布
GNU系统概览
GNU系统是一套向上兼容Unix的完全自由的操作系统。GNU代表“GNU's Not Unix”。它的发音是带有g音的单音节。Richard Stallman在1983年9月做出了GNU工程的初始声明。接着在1985年3月又发表了更长的版本,叫做GNU宣言。它被翻译成多种其他语言。
狼啸风云
2019/11/28
1.2K0
使用 CI/CD 优化前端构建的五种策略
如今使用 CI/CD 工具是网页应用程序开发的一个必要条件。作为关键开发路径的一部分,加快构建系统的速度对于提高开发人员的生产效率是至关重要的。
coder_koala
2021/09/22
1.1K0
使用 CI/CD 优化前端构建的五种策略
使用 CI/CD 优化前端构建的五种策略
如今使用 CI/CD 工具是网页应用程序开发的一个必要条件。作为关键开发路径的一部分,加快构建系统的速度对于提高开发人员的生产效率是至关重要的。
用户4456933
2021/07/12
1K0
使用 CI/CD 优化前端构建的五种策略
使用GNU Screen管理持久终端会话
GNU Screen是一种与终端会话配合使用的工具,允许用户在断开连接后恢复会话。Screen可防止会话“超时”或断开SSH连接或本地终端仿真器。单个Screen会话具有托管多个会话或“窗口”的能力。Screen可用于各种任务,例如在终端环境中维护持久性IRC会话和多任务。
苏子晨
2018/08/17
2.1K0
子目录下的html如何访问servlet?
4)子目录下的html如何访问servlet?web.xml和servlet都一样。只有html有变化。
马克java社区
2021/07/07
9110
使用python遍历子目录中的文件
这话真不是随便说的。在做的一个项目中,需要遍历子目录,并将文件保存到列表中,通过Python,几行代码就能实现。
fanzhh
2019/08/20
5.3K0
大分区表的手工并行优化
这段时间饱受大分区表的性能之苦,碰到最大的一个分区表有1个t左右,操作起来每个细节都需要格外小心,我这次和大家分享的案例应用的分区表不是很大,有80G左右。但是这个分区主要分区比较多,有将近2000个左右的分区。 举一个案例来说明一下。 现在要做以下下几件事,要保证要宕机时间尽可能短。 为了方便起见,我暂定现在有4个DB instance,叫par01,par02,par03,par04. 1.需要对par01的数据运行Update语句,根据条件更新(update操作可能会移动分区), 2.然后把par01
jeanron100
2018/03/13
7690
Oracle优化08-并行执行
在讨论Oracle的性能问题时,通常要假设一个前提,那就是这个系统是OLTP还是OLAP(或者说数据仓库系统)。 只有在这个前提下,讨论一些性能问题才有意义,因为这两类系统太不一样了,甚至很多技术是相悖的。
小小工匠
2021/08/16
3780
点击加载更多

相似问题

Android测试模块(Gradle插件1.3):来自非默认maven存储库的依赖项

13

android studio中的插件gradle无法工作

10

Android Studio 1.3 -无法进行本机调试

23

Gradle android测试插件找不到测试

12

自定义android gradle插件无法加载类

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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