以下是mongodb中的集合
{
"name" : "Tom" ,
"occupation" : "employee" ,
"data" : [
{
"owns" : "Television" ,
"company" : "xyz"
},
{
"owns" : "Television" ,
"company" : "abc"
},
{
"owns" : "laptop" ,
"company" : "abc"
} ,
{
"owns" : "Television" ,
"company" : "xyz"
}
]
}
当我询问
db.exp.find({"data.owns" : "Television"})
MongoDB返回结果集中具有"拥有":"笔记本电脑"的文档。
当我询问
db.exp.find({"data.owns": "Television"},{_id: 0, data: {$elemMatch: {"owns": "Television"}}})
结果仅显示数据字段中第一个匹配“TV”的文档
我如何查询获得汤姆拥有电视的所有3个文档,不包括笔记本电脑文档。预期结果
[
{
"owns" : "Television" ,
"company" : "xyz"
},
{
"owns" : "Television" ,
"company" : "abc"
},
{
"owns" : "Television" ,
"company" : "xyz"
}
]
注意:在本例中,我只提到了数据字段中的4个文档,其中原始集合有50多个文档。对不起,我的英语很差:)。
假设集合中有两个文档exp
[
{
"name" : "Tom" ,
"occupation" : "employee" ,
"data" : [ { "owns" : "Television" , "company" : "xyz" },
{ "owns" : "Television" , "company" : "abc" },
{ "owns" : "laptop" , "company" : "abc" } ,
{ "owns" : "Television" , "company" : "xyz" } ]
},
{
"name" : "Jerry" ,
"occupation" : "employee" ,
"data" : [ { "owns" : "Mobile" , "company" : "xyz" },
{ "owns" : "Mobile" , "company" : "abc" },
{ "owns" : "laptop" , "company" : "abc" } ,
{ "owns" : "Laptop" , "company" : "xyz" } ]
}
]
然后使用您的查询db。exp.find({“data.owns”:“Television”})
,您将获得
{ "_id" : 101,
"name" : "Tom",
"occupation" : "employee",
"data" : [
{ "owns" : "Television", "company" : "xyz" },
{ "owns" : "Television", "company" : "abc" },
{ "owns" : "laptop", "company" : "abc" },
{ "owns" : "Television", "company" : "xyz" }
]
}
由于第一个文档的owns
字段等于Television
,因此结果将是完整的第一个文档。(包括那些有拥有
而不是电视
的字段)第二个文档将不会是结果的一部分,因为它没有任何值为电视
的拥有
字段。
$elemMatch
只会返回一个文档。
http://docs.mongodb.org/manual/reference/operator/projection/elemMatch/
如果您只希望数组中的这三个对象的值为Television
,那么您可以使用光标来存储查询的整个结果(在本例中仅一个文档)。
var x = db.authors.find({"data.owns": "Television"},{_id: 0, "data.owns": 1})
现在,使用for each循环仅获取具有值为Television
的owns
文档。
这可以使用聚合来完成。
$unwind
数据数组
db.exp.aggregate(
[
{ "$unwind": "$data" },
{ "$match": { "data.owns": "Television" }},
{
"$group": {
"_id": {
"name": "$name",
"occupation": "$occupation"
},
"data": { "$push": "$data" }
}
},
{
"$project": {
"name": "$_id.name",
"occupation": "$_id.occupation",
"data": 1,
"_id": 0
}
}
]
)
结果:
{
"data" : [
{
"owns" : "Television",
"company" : "xyz"
},
{
"owns" : "Television",
"company" : "abc"
},
{
"owns" : "Television",
"company" : "xyz"
}
],
"name" : "Tom",
"occupation" : "employee"
}
问题内容: 我正在为MongoDB使用Node.JS驱动程序,我想执行一个同步查询,例如: 问题是,db.open是一个异步调用(它不会阻塞),因此getAThing返回“ undefined”,我希望它返回查询结果。我确定我可以使用某种阻止机制,但我想知道执行此类操作的正确方法。 问题答案: 没有办法使这种同步变得不可怕。正确的方法是接受回调函数作为参数,然后在可用时调用该函数。 节点7.6+更
我有Maven应用程序,具有3个不同的配置文件,如下所示 我有这样的Maven结构: src/main/config/default/WEB-INF/WEB。xml src/main/config/dev/WEB-INF/WEB。xml src/main/config/test/WEB-INF/web.xml src/main/config/prod/WEB-INF/web.xml src/mai
问题内容: 我使用10gen的本机node.js驱动器将mongodb(2.2.2)与node.js一起使用。 起初一切顺利。但是当涉及到并发基准测试部分时,会发生很多错误。频繁进行1000次并发连接/关闭可能会导致mongodb拒绝任何进一步的请求,并出现以下错误: 另外,如果许多客户端在没有显式关闭的情况下关闭,则mongodb将花费几分钟的时间来检测并关闭它们。这也将导致类似的连接问题。(使
我试试看。js与mongodb(2.2.2)一起使用本机节点。js drive by 10gen。 起初一切都很顺利。但在并发基准测试部分,出现了很多错误。频繁连接/关闭1000次并发可能会导致mongodb拒绝任何进一步的请求,错误如下: 此外,如果很多客户端在没有显式关闭的情况下关闭,mongodb需要几分钟来检测并关闭它们。这也会导致类似的连接问题。(使用/var/log/mongodb/m
在OpenAPI/Swagger文件中声明“char”的正确方法是什么?我试过这些..但不起作用 我也很累,但运气不好
问题内容: 假设我要编写以下HQL查询: 将其编写为参数化查询的正确方法是什么,例如 问题答案: 我不确定如何使用位置参数来执行此操作,但是如果可以使用命名参数而不是位置参数,则可以将命名参数放在方括号内,并且可以使用Query接口中的setParameterList方法将值列表绑定到此参数。