Docs 菜单
Docs 主页
/ /

hasRoot Operator

hasRoot

当您指定 returnScopereturnStoredSource 选项时,hasRoot操作符可用于查询根级字段。

hasRoot 通过以下语法实现:

1{
2 $search: {
3 "index": "<index name>", // optional, defaults to "default"
4 "hasRoot": {
5 "operator": {
6 <operator-specification>
7 }
8 },
9 "returnScope": {
10 "path": "<embedded-documents-field-to-retrieve>"
11 },
12 "returnStoredSource": true,
13 }
14}
字段
类型
说明
必要性

operator

对象

用于查询索引字段的操作符。这指定了过滤子文档的搜索条件。

必需

要使用此操作符,必须在索引定义中执行以下操作:

  • 为要查询的根级字段建立索引。

  • 对要检索为 embeddedDocuments 类型的对象大量进行索引。您还必须为要检索的嵌套字段配置 storedSource

在查询中,您必须执行以下操作:

  • 指定 returnScope 以设立搜索操作符的字段范围。

  • returnStoredSource 设置为 true 以返回 storedSource 字段。

本节中的示例使用 sample_training.companies命名空间。如果您加载示例数据集并在集合上创建索引,则可以尝试本节中演示的示例查询。

本节中的查询使用以下索引。此索引定义将MongoDB Search 配置为执行以下操作:

  • 自动索引集合中所有可动态索引的字段。

  • products 、 和funding_rounds funding_rounds.investments字段索引为 embeddedDocuments 类型。

  • 将以下字段存储在 mongot 上:

    • funding_rounds.raised_currency_code

    • funding_rounds.raised_amount

    • funding_rounds.investments

    • products.name

1{
2 "mappings": {
3 "dynamic": true,
4 "fields": {
5 "funding_rounds": {
6 "dynamic": true,
7 "fields": {
8 "investments": [
9 {
10 "dynamic": true,
11 "type": "embeddedDocuments"
12 }
13 ]
14 },
15 "storedSource": {
16 "include": [
17 "raised_currency_code",
18 "raised_amount",
19 "investments"
20 ]
21 },
22 "type": "embeddedDocuments"
23 },
24 "products": {
25 "dynamic": true,
26 "storedSource": {
27 "include": [
28 "name"
29 ]
30 },
31 "type": "embeddedDocuments"
32 }
33 }
34 }
35}

以下查询返回 products,其中根级字段founded_year 的年份介于 20052010 之间。

1db.companies.aggregate([
2 {
3 "$search": {
4 "returnStoredSource": true,
5 "returnScope": { "path": "products" },
6 "hasRoot": {
7 "operator": {
8 "range": {
9 "path": "founded_year",
10 "gte": 2005,
11 "lte": 2010
12 }
13 }
14 }
15 }
16 }
17])
[
{ name: 'Wikison Wetpaint' },
{ name: 'Wetpaint Social Distribution System' },
{ name: 'Omnidrive' },
{ name: 'Twitter Blocks' },
{ name: 'Twicco' },
{ name: 'Slacker Web Player' },
{ name: 'Slacker Desktop Radio' },
{ name: 'Slacker Portable Player' },
{ name: 'Babelgum' },
{ name: 'Powerset' },
{ name: 'OpenX Enterprise' },
{ name: 'OpenX Market' },
{ name: 'OpenX Lift' },
{ name: 'Sparter' },
{ name: 'Thoof' },
{ name: 'MyFree411' },
{ name: 'Wesabe' },
{ name: 'Prosper' },
{ name: 'Stickam' },
{ name: 'PayPerLive.com' }
]

以下查询使用name Facebook操作符在text 字段中搜索名为 的公司,检索所有投资者(funding_rounds.raised_amountfunding_rounds.raised_currency_code )投资的金额(investments.personinvestments.financial_org )公司。

1db.companies.aggregate([
2 {
3 "$search": {
4 "returnStoredSource": true,
5 "returnScope": { "path": "funding_rounds" },
6 "hasRoot": {
7 "operator": {
8 "text": {
9 "path": "name",
10 "query": "Facebook"
11 }
12 }
13 }
14 }
15 }
16])
[
{
raised_amount: 500000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: null,
person: {
first_name: 'Peter',
last_name: 'Thiel',
permalink: 'peter-thiel'
}
},
{
company: null,
financial_org: null,
person: {
first_name: 'Reid',
last_name: 'Hoffman',
permalink: 'reid-hoffman'
}
}
]
},
{
raised_amount: 12700000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: { name: 'Accel Partners', permalink: 'accel-partners' },
person: null
},
{
company: null,
financial_org: null,
person: {
first_name: 'Mark',
last_name: 'Pincus',
permalink: 'mark-pincus'
}
},
{
company: null,
financial_org: null,
person: {
first_name: 'Reid',
last_name: 'Hoffman',
permalink: 'reid-hoffman'
}
}
]
},
{
raised_amount: 27500000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: { name: 'Greylock Partners', permalink: 'greylock' },
person: null
},
{
company: null,
financial_org: {
name: 'Meritech Capital Partners',
permalink: 'meritech-capital-partners'
},
person: null
},
{
company: null,
financial_org: { name: 'Founders Fund', permalink: 'founders-fund' },
person: null
},
{
company: null,
financial_org: { name: 'SV Angel', permalink: 'sv-angel' },
person: null
}
]
},
{
raised_amount: 240000000,
raised_currency_code: 'USD',
investments: [
{
company: { name: 'Microsoft', permalink: 'microsoft' },
financial_org: null,
person: null
}
]
},
{
raised_amount: 60000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: null,
person: {
first_name: 'Li',
last_name: 'Ka-shing',
permalink: 'li-ka-shing'
}
},
{
company: null,
financial_org: { name: 'Horizons Ventures', permalink: 'horizons-ventures' },
person: null
}
]
},
{
raised_amount: 15000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: {
name: 'European Founders Fund',
permalink: 'european-founders-fund'
},
person: null
}
]
},
{
raised_amount: 100000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: {
name: 'TriplePoint Capital',
permalink: 'triplepoint-capital'
},
person: null
}
]
},
{
raised_amount: 60000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: null,
person: {
first_name: 'Li',
last_name: 'Ka-shing',
permalink: 'li-ka-shing'
}
},
{
company: null,
financial_org: { name: 'Horizons Ventures', permalink: 'horizons-ventures' },
person: null
}
]
},
{
raised_amount: 200000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: {
name: 'Digital Sky Technologies',
permalink: 'digital-sky-technologies-fo'
},
person: null
}
]
},
{
raised_amount: 210000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: { name: 'Elevation Partners', permalink: 'elevation-partners' },
person: null
}
]
},
{
raised_amount: 1500000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: { name: 'Goldman Sachs', permalink: 'goldman-sachs' },
person: null
},
{
company: null,
financial_org: {
name: 'Digital Sky Technologies',
permalink: 'digital-sky-technologies-fo'
},
person: null
}
]
}
]

以下查询在嵌套的funding_rounds.investments 字段中搜索包含 术语的金融组织(Ventures namenetworkdescription字段中的任意位置),这些组织投资于使用 术语( 字段中的任意位置)描述的公司)。该查询使用复合运算符搜索:

  • 使用 embeddedDocument操作符的嵌套 funding_rounds.investments.financial_org.name字段

  • 使用 hasRoot操作符的根级 description字段

returnScope 将操作符的上下文设置为 funding_rounds embeddedDocuments 类型字段,并将 returnStoredSource字段设立为 true 以仅返回 storedSource 字段。该查询将结果限制为 5 个文档。

1db.companies.aggregate([
2 {
3 "$search": {
4 "compound": {
5 "should": [
6 {
7 "embeddedDocument": {
8 "path": "funding_rounds.investments",
9 "operator": {
10 "wildcard": {
11 "path": "funding_rounds.investments.financial_org.name",
12 "query": "*Ventures*",
13 "allowAnalyzedField": true
14 }
15 }
16 }
17 },
18 {
19 "hasRoot": {
20 "operator": {
21 "wildcard": {
22 "path": "description",
23 "query": "*network*",
24 "allowAnalyzedField": true
25 }
26 }
27 }
28 }
29 ]
30 },
31 "returnScope": {"path": "funding_rounds"},
32 "returnStoredSource": true
33 }
34 },
35 {
36 "$limit": 5
37 }
38])
[
{
raised_amount: 6500000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: {
name: 'Velocity Interactive Group',
permalink: 'velocity-interactive-group'
},
person: null
},
{
company: null,
financial_org: { name: 'TELUS Ventures', permalink: 'telus-ventures' },
person: null
},
{
company: null,
financial_org: {
name: 'Charles River Ventures',
permalink: 'charles-river-ventures'
},
person: null
},
{
company: null,
financial_org: {
name: 'Partech Ventures',
permalink: 'partech-international'
},
person: null
},
{
company: null,
financial_org: { name: 'Fidelity Ventures', permalink: 'fidelity-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Star Ventures', permalink: 'star-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Castile Ventures', permalink: 'castile-ventures' },
person: null
}
]
},
{
raised_amount: 25000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: { name: 'Boulder Ventures', permalink: 'boulder-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Sequel Venture Partners', permalink: 'sequel' },
person: null
},
{
company: null,
financial_org: { name: 'Sprout Group', permalink: 'the-sprout-group' },
person: null
},
{
company: null,
financial_org: { name: 'EPIC Ventures', permalink: 'epic-ventures' },
person: null
},
{
company: null,
financial_org: {
name: 'Garage Technology Ventures',
permalink: 'garage-technology-ventures'
},
person: null
},
{
company: null,
financial_org: {
name: 'Pritzker Group Venture Capital',
permalink: 'pritzker-group-venture-capital'
},
person: null
},
{
company: null,
financial_org: { name: 'Ironside Ventures', permalink: 'ironside-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Valhalla Partners', permalink: 'valhalla-partners' },
person: null
},
{
company: null,
financial_org: { name: 'Vista Ventures', permalink: 'vista-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'JPMorgan Chase & Co', permalink: 'jpmorgan-chase-co' },
person: null
},
{
company: null,
financial_org: {
name: 'DFJ Portage Ventures',
permalink: 'dfj-portage-ventures'
},
person: null
}
]
},
{
raised_amount: 49500000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: { name: 'Versant Ventures', permalink: 'versant-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Skyline Ventures', permalink: 'skyline-ventures' },
person: null
},
{
company: null,
financial_org: {
name: 'Three Arch Partners',
permalink: 'three-arch-partners'
},
person: null
},
{
company: null,
financial_org: {
name: 'Affinity Capital Management',
permalink: 'affinity-capital-management'
},
person: null
},
{
company: null,
financial_org: { name: 'Alloy Ventures', permalink: 'alloy-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Delphi Ventures', permalink: 'delphi-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'GBS Ventures', permalink: 'gbs-ventures' },
person: null
},
{
company: null,
financial_org: {
name: 'INVESCO Private Capital',
permalink: 'invesco-private-capital'
},
person: null
},
{
company: null,
financial_org: {
name: 'J.P. Morgan Securities Inc.',
permalink: 'j-p-morgan-securities-inc'
},
person: null
},
{
company: null,
financial_org: { name: 'ONSET Ventures', permalink: 'onset-ventures' },
person: null
}
]
},
{
raised_amount: 1400000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: {
name: 'Accelerator Ventures',
permalink: 'accelerator-ventures'
},
person: null
},
{
company: null,
financial_org: { name: 'JAIC America', permalink: 'jaic-america' },
person: null
},
{
company: null,
financial_org: {
name: 'Pacific I&T Ventures',
permalink: 'pacific-i-t-ventures'
},
person: null
},
{
company: null,
financial_org: null,
person: {
first_name: 'Eric',
last_name: 'Di Benedetto',
permalink: 'eric-di-benedetto'
}
},
{
company: null,
financial_org: {
name: 'iSteps App Ventures',
permalink: 'isteps-app-ventures'
},
person: null
},
{
company: null,
financial_org: null,
person: {
first_name: 'Ben T.',
last_name: 'Smith, IV',
permalink: 'ben-smith-iv'
}
},
{
company: null,
financial_org: null,
person: {
first_name: 'Tim',
last_name: 'Stevens',
permalink: 'tim-stevens'
}
},
{
company: null,
financial_org: null,
person: {
first_name: 'Fabrice',
last_name: 'Grinda',
permalink: 'fabrice-grinda'
}
},
{
company: null,
financial_org: { name: 'LaunchCapital', permalink: 'launchcapital' },
person: null
}
]
},
{
raised_amount: 1000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: {
name: 'DFJ Gotham Ventures',
permalink: 'dfj-gotham-ventures'
},
person: null
},
{
company: null,
financial_org: {
name: 'Metamorphic Ventures',
permalink: 'metamorphic-ventures-llc'
},
person: null
},
{
company: null,
financial_org: { name: 'RRE Ventures', permalink: 'rre-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Pilot Group', permalink: 'pilot-group' },
person: null
},
{
company: null,
financial_org: { name: 'AOL Ventures', permalink: 'aol-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Lerer Ventures', permalink: 'lerer-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Bowery Capital', permalink: 'bowery-capital' },
person: null
}
]
}
]

后退

hasAncestor

在此页面上