草庐IT

关于mongodb:在Mongoose、Node.js、MongodDB中通过特定属性查找嵌入式文档

codeneng 2023-03-28 原文

Finding an Embedded Document by a specific property in Mongoose, Node.js, MongodDB

对于这个应用程序,我使用的是 Node.js、MongoDB、Mongoose


瓦伦斯林,

应该这样做

1
2
3
4
5
6
7
8
app.get('/:title/:value', function(req, res) {
  Param.findOne({'pivots.value': req.param('value'),"title":req.param('title')}},
                function(err, record) {
                  record.pivot.counter++;
                  res.redirect(m_pivot.destination);  
                 record.save();
               });
});

注意查询的复数形式以匹配架构中的字段名称


您可以像这样使用嵌入式文档属性进行查询:

1
{'pivot.value': req.param('value')}}

根据评论更新:

1
2
3
4
5
6
7
8
app.get('/:title/:value', function(req, res) {
  Param.findOne({'pivot.value': req.param('value'),"title":req.param('title')}},
                function(err, record) {
                  record.pivot.counter++;
                  res.redirect(m_pivot.destination);  
                 record.save();
               });
});

  • 似乎不起作用,你能告诉我在我在 OP 中概述的代码中我应该在哪里调用它吗
  • 在您的建议中,函数记录中有一个包含枢轴数组的参数。我仍然需要再次对枢轴进行分类以找到正确的。我希望能够获得指向正确枢轴的指针,以便我可以转到 URL。
  • 另外,就使用的变量而言,您的函数是错误的-"m_pivot"是我不使用的内部循环的变量。您将枢轴引用为 record.pivot


最大的问题是,如果你的 req 有一些字段是空的(应该充当通配符),你将找不到任何东西,因为 mongo 也尝试匹配空参数,所以搜索 {"user": "bob", "color":"} 与 {"user":"bob", "color":"red"} 或 {"user ":"bob"}。这意味着您必须先创建一个查询对象并过滤掉任何未使用的参数,然后再将其传入,并且如果您创建了一个查询对象,您就不能再做类似 " 的事情了user.name=..." 因为 mongo 将其解释为错误,因为它不会首先将对象文字解析为字符串。
关于这个问题有什么想法吗?

ps。你会认为制作这样的对象很容易:
用户名="鲍勃"; user.color:"绿色"; user.signup.time="12342561"
然后只使用用户作为查询对象:/


我暂时使用了一个简单的for循环来解析对象数组,如下:

1
2
3
4
5
for (var i=0; i <record.pivots.length; i++){
   if (record.pivots[i].value == req.param('value')){
      res.redirect(record.pivots.destination);
   }
}

但是,我仍然认为 Mongoose 必须有一种更简单的方式与嵌入文档进行交互——而且这个循环有点慢,尤其是当嵌入文档的数量增长很大时。

如果有人对在 js 或 mongoose 函数中更快地搜索此对象数组有任何建议,请在下面发布。


我认为您正在寻找 "$in" 关键字?

如:

1
{a: {$in: [10,"hello"]}}

来源:MongoDB 查询备忘单

  • 我不这么认为 - $in 允许您在 a 的值为 10 或 hello 的集合中搜索。这不是我在这里寻找的——对我来说,基本查询本身不起作用,出于某种奇怪的原因。

有关关于mongodb:在Mongoose、Node.js、MongodDB中通过特定属性查找嵌入式文档的更多相关文章

  1. Ruby - 如何在读取文件时跳过/忽略特定行? - 2

    在读取/解析文件(使用Ruby)时忽略某些行的最佳方法是什么?我正在尝试仅解析Cucumber.feature文件中的场景,并希望跳过不以Scenario/Given/When/Then/And/But开头的行。下面的代码有效,但它很荒谬,所以我正在寻找一个聪明的解决方案:)File.open(file).each_linedo|line|line.chomp!nextifline.empty?nextifline.include?"#"nextifline.include?"Feature"nextifline.include?"Inorder"nextifline.include?

  2. ruby-on-rails - 如何处理 Grape 中特定操作的过滤器之前? - 2

    我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?

  3. ruby-on-rails - 关于 Ruby 的一般问题 - 2

    我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia

  4. ruby-on-rails - Ruby on Rails - 需要在每周的特定时间将消息发送到电子邮件 - 2

    我想知道我应该如何着手这个项目。我需要每周向人们发送一次电子邮件。但是,这必须在每周的特定时间自动生成并发送。编码有多难?我需要知道是否有任何书籍可以提供帮助,或者你们中的任何人是否可以指导我。它必须使用ruby​​onrails进行编程。因此有一个网络服务和数据库集成。干杯 最佳答案 为什么这么复杂?您只需安排工作。您可以使用Delayed::Job例如。Delayed::Job让您可以使用run_at符号在特定时间安排作业,如下所示:Delayed::Job.enqueue(SendEmailJob.new(...),:run_

  5. ruby-on-rails - 如果特定语言环境中缺少翻译,如何配置 i18n 以使用 en 语言环境? - 2

    如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback

  6. ruby-on-rails - Assets 管道损坏 : Not compiling on the fly css and js files - 2

    我开始了一个新的Rails3.2.5项目,Assets管道不再工作了。CSS和Javascript文件不再编译。这是尝试生成Assets时日志的输出:StartedGET"/assets/application.css?body=1"for127.0.0.1at2012-06-1623:59:11-0700Servedasset/application.css-200OK(0ms)[2012-06-1623:59:11]ERRORNoMethodError:undefinedmethod`each'fornil:NilClass/Users/greg/.rbenv/versions/1

  7. ruby-on-rails - Rails - 理解 application.js 和 application.css - 2

    rails新手。只是想了解\assests目录中的这两个文件。例如,application.js文件有如下行://=requirejquery//=requirejquery_ujs//=require_tree.我理解require_tree。只是将所有JS文件添加到当前目录中。根据上下文,我可以看出requirejquery添加了jQuery库。但是它从哪里得到这些jQuery库呢?我没有在我的Assets文件夹中看到任何jquery.js文件——或者直接在我的整个应用程序中没有看到任何jquery.js文件?同样,我正在按照一些说明安装TwitterBootstrap(http:

  8. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

  9. ruby - 根据要求使用特定的 VCR 磁带 - 2

    情况:使用Rspec、FactoryGirl和VCR测试Rails应用程序。每次创建用户时,都会通过Stripe的API创建关联的Stripe客户。测试时,添加VCR.use_cassette或describe"...",vcr:{cassette_name:'stripe-customer'}do...到涉及用户创建的每个规范。我的实际解决方案如下:RSpec.configuredo|config|config.arounddo|example|VCR.use_cassette('stripe-customer')do|cassette|example.runendendend但这是

  10. ruby - 关于 Ruby 中 Dir[] 和 File.join() 的混淆 - 2

    我在Ruby中遇到了一个关于Dir[]和File.join()的简单程序,blobs_dir='/path/to/dir'Dir[File.join(blobs_dir,"**","*")].eachdo|file|FileUtils.rm_rf(file)ifFile.symlink?(file)我有两个困惑:首先,File.join(@blobs_dir,"**","*")中的第二个和第三个参数是什么意思?其次,Dir[]在Ruby中有什么用?我只知道它等价于Dir.glob(),但是,我对Dir.glob()确实不是很清楚。 最佳答案

随机推荐