我有两个 Mongoose 模型。我们称一个模型为 foo,第二个模型为 bar。 bar 记录有一个相关的 foo 记录和一个电子邮件地址。我希望我的 api 被传递一个电子邮件地址并返回一个 foo 记录列表,这些记录没有使用该电子邮件地址创建的 bar 记录。我将如何使用 mongoose 执行此操作?
我知道我可以用 SQL 编写这个查询,但我一直在尝试学习一个没有 sql 的数据库,因此学习了 mongo。
这是一个例子。我有 2 个 foo 记录和 2 个 bar 记录:
福斯:
{name:"first foo"}
{name:"second foo"}
还有我的酒吧记录:
{
email:"requestEmail@example.com,
foo_id:first_foo._id
}
{
email:"someOther@example.com,
foo_id:second_foo._id
}
对我的 api 的请求将通过电子邮件发送:requestEmail@example.com。在这种情况下,我想返回第二个 foo(以及任何其他 foo 记录),因为第一个 foo 在请求中有一个带有电子邮件的 bar 记录。
最佳答案
分两次完成这可能是最简单的。首先,您应该检索所有 Bar 对象,然后根据它们过滤 Foo 对象。我没有 node.js 编译器,所以我的代码包含一些错误(我可以在当天晚些时候编辑它,但你会得到图片)。
var findFooWOutBar = function(theEmail)
{
Bar.find({email: theEmail}, function(err,docs)
{
if(err)
{
console.log(err);
return
}
else
{
var barIds=[];
docs.forEach(function(bar) //fetching all of the bars with the email
{
barIds.push(bar._id);//or whatever you are using as a reference
});
//nin means not in
Foo.find().nin('barRef', barIds).exec(function(err,foos)
{
//process your Foo results (foos) here
}); //have not tested this, but according to the docs it should go something like this
}
});
}
所以基本上,也许这里有些东西不完全正确,但您需要一组 Bar id(或您正在使用的其他引用键)并将其与 nin(不是 in)的使用结合起来。
关于node.js - mongoose/mongodb 查询没有相关记录的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23284022/
我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.
我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa
大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle