MongoDB create index of all text values of a key inside arrays
I am trying to generate a mongodb index for the text values for the following keys: CVE_data_meta, vendor_name and product_name. The values are part of arrays.
My code is as follows:
col.createIndex({
'cve.affects.vendor.vendor_data.vendor_name': 'text',
'cve.affects.vendor.vendor_data.product.product_data.product_name': 'text',
'cve.CVE_data_meta.ID': 'text'
}).then(() => {
db.close();
The issue i am running into is 'namespace name generated from index name "vulndbapi.nvd.$cve.affects.vendor.vendor_data.vendor_name_text_cve.affects.vendor.vendor_data.product.product_data.product_name_text_cve.CVE_data_meta.ID_text" is too long (127 byte max)'. Also, if i just try to index by CVE id, the search query is coming up empty.
The sample dataset. The actual dataset is much bigger.
{
"cve": {
"data_type": "CVE",
"data_format": "MITRE",
"data_version": "4.0",
"CVE_data_meta": {
"ID": "CVE-2012-0001",
"ASSIGNER": "cve@mitre.org"
},
"affects": {
"vendor": {
"vendor_data": [{
"vendor_name": "microsoft",
"product": {
"product_data": [{
"product_name": "windows_7",
"version": {
"version_data": [{
"version_value": "-",
"version_affected": "="
}]
}
},
{
"product_name": "windows_server_2003",
"version": {
"version_data": [{
"version_value": "*",
"version_affected": "="
}]
}
}
]
}
}]
}
}
}
}
My query code is
col.find({
$text: {
$search: 'CVE-2012-0001'
// $search: 'firefox'
}
}).then((resolve) => {
console.log(resolve);
db.close();
How can i generate indexes when the value is part of an array, and index all the items of that array? The final collection will exceed 50K items
mongodb mongodb-query monk
add a comment |
I am trying to generate a mongodb index for the text values for the following keys: CVE_data_meta, vendor_name and product_name. The values are part of arrays.
My code is as follows:
col.createIndex({
'cve.affects.vendor.vendor_data.vendor_name': 'text',
'cve.affects.vendor.vendor_data.product.product_data.product_name': 'text',
'cve.CVE_data_meta.ID': 'text'
}).then(() => {
db.close();
The issue i am running into is 'namespace name generated from index name "vulndbapi.nvd.$cve.affects.vendor.vendor_data.vendor_name_text_cve.affects.vendor.vendor_data.product.product_data.product_name_text_cve.CVE_data_meta.ID_text" is too long (127 byte max)'. Also, if i just try to index by CVE id, the search query is coming up empty.
The sample dataset. The actual dataset is much bigger.
{
"cve": {
"data_type": "CVE",
"data_format": "MITRE",
"data_version": "4.0",
"CVE_data_meta": {
"ID": "CVE-2012-0001",
"ASSIGNER": "cve@mitre.org"
},
"affects": {
"vendor": {
"vendor_data": [{
"vendor_name": "microsoft",
"product": {
"product_data": [{
"product_name": "windows_7",
"version": {
"version_data": [{
"version_value": "-",
"version_affected": "="
}]
}
},
{
"product_name": "windows_server_2003",
"version": {
"version_data": [{
"version_value": "*",
"version_affected": "="
}]
}
}
]
}
}]
}
}
}
}
My query code is
col.find({
$text: {
$search: 'CVE-2012-0001'
// $search: 'firefox'
}
}).then((resolve) => {
console.log(resolve);
db.close();
How can i generate indexes when the value is part of an array, and index all the items of that array? The final collection will exceed 50K items
mongodb mongodb-query monk
add a comment |
I am trying to generate a mongodb index for the text values for the following keys: CVE_data_meta, vendor_name and product_name. The values are part of arrays.
My code is as follows:
col.createIndex({
'cve.affects.vendor.vendor_data.vendor_name': 'text',
'cve.affects.vendor.vendor_data.product.product_data.product_name': 'text',
'cve.CVE_data_meta.ID': 'text'
}).then(() => {
db.close();
The issue i am running into is 'namespace name generated from index name "vulndbapi.nvd.$cve.affects.vendor.vendor_data.vendor_name_text_cve.affects.vendor.vendor_data.product.product_data.product_name_text_cve.CVE_data_meta.ID_text" is too long (127 byte max)'. Also, if i just try to index by CVE id, the search query is coming up empty.
The sample dataset. The actual dataset is much bigger.
{
"cve": {
"data_type": "CVE",
"data_format": "MITRE",
"data_version": "4.0",
"CVE_data_meta": {
"ID": "CVE-2012-0001",
"ASSIGNER": "cve@mitre.org"
},
"affects": {
"vendor": {
"vendor_data": [{
"vendor_name": "microsoft",
"product": {
"product_data": [{
"product_name": "windows_7",
"version": {
"version_data": [{
"version_value": "-",
"version_affected": "="
}]
}
},
{
"product_name": "windows_server_2003",
"version": {
"version_data": [{
"version_value": "*",
"version_affected": "="
}]
}
}
]
}
}]
}
}
}
}
My query code is
col.find({
$text: {
$search: 'CVE-2012-0001'
// $search: 'firefox'
}
}).then((resolve) => {
console.log(resolve);
db.close();
How can i generate indexes when the value is part of an array, and index all the items of that array? The final collection will exceed 50K items
mongodb mongodb-query monk
I am trying to generate a mongodb index for the text values for the following keys: CVE_data_meta, vendor_name and product_name. The values are part of arrays.
My code is as follows:
col.createIndex({
'cve.affects.vendor.vendor_data.vendor_name': 'text',
'cve.affects.vendor.vendor_data.product.product_data.product_name': 'text',
'cve.CVE_data_meta.ID': 'text'
}).then(() => {
db.close();
The issue i am running into is 'namespace name generated from index name "vulndbapi.nvd.$cve.affects.vendor.vendor_data.vendor_name_text_cve.affects.vendor.vendor_data.product.product_data.product_name_text_cve.CVE_data_meta.ID_text" is too long (127 byte max)'. Also, if i just try to index by CVE id, the search query is coming up empty.
The sample dataset. The actual dataset is much bigger.
{
"cve": {
"data_type": "CVE",
"data_format": "MITRE",
"data_version": "4.0",
"CVE_data_meta": {
"ID": "CVE-2012-0001",
"ASSIGNER": "cve@mitre.org"
},
"affects": {
"vendor": {
"vendor_data": [{
"vendor_name": "microsoft",
"product": {
"product_data": [{
"product_name": "windows_7",
"version": {
"version_data": [{
"version_value": "-",
"version_affected": "="
}]
}
},
{
"product_name": "windows_server_2003",
"version": {
"version_data": [{
"version_value": "*",
"version_affected": "="
}]
}
}
]
}
}]
}
}
}
}
My query code is
col.find({
$text: {
$search: 'CVE-2012-0001'
// $search: 'firefox'
}
}).then((resolve) => {
console.log(resolve);
db.close();
How can i generate indexes when the value is part of an array, and index all the items of that array? The final collection will exceed 50K items
mongodb mongodb-query monk
mongodb mongodb-query monk
edited Jan 2 at 19:22
securisec
asked Jan 2 at 19:05
securisecsecurisec
181113
181113
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
The default name for an index is the concatenated names of the included fields, which ends up being too long in your case. The solution is to provide your own name for the index:
col.createIndex({
'cve.affects.vendor.vendor_data.vendor_name': 'text',
'cve.affects.vendor.vendor_data.product.product_data.product_name': 'text',
'cve.CVE_data_meta.ID': 'text'
}, {name: 'vendor_product_text_index'})
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54011835%2fmongodb-create-index-of-all-text-values-of-a-key-inside-arrays%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The default name for an index is the concatenated names of the included fields, which ends up being too long in your case. The solution is to provide your own name for the index:
col.createIndex({
'cve.affects.vendor.vendor_data.vendor_name': 'text',
'cve.affects.vendor.vendor_data.product.product_data.product_name': 'text',
'cve.CVE_data_meta.ID': 'text'
}, {name: 'vendor_product_text_index'})
add a comment |
The default name for an index is the concatenated names of the included fields, which ends up being too long in your case. The solution is to provide your own name for the index:
col.createIndex({
'cve.affects.vendor.vendor_data.vendor_name': 'text',
'cve.affects.vendor.vendor_data.product.product_data.product_name': 'text',
'cve.CVE_data_meta.ID': 'text'
}, {name: 'vendor_product_text_index'})
add a comment |
The default name for an index is the concatenated names of the included fields, which ends up being too long in your case. The solution is to provide your own name for the index:
col.createIndex({
'cve.affects.vendor.vendor_data.vendor_name': 'text',
'cve.affects.vendor.vendor_data.product.product_data.product_name': 'text',
'cve.CVE_data_meta.ID': 'text'
}, {name: 'vendor_product_text_index'})
The default name for an index is the concatenated names of the included fields, which ends up being too long in your case. The solution is to provide your own name for the index:
col.createIndex({
'cve.affects.vendor.vendor_data.vendor_name': 'text',
'cve.affects.vendor.vendor_data.product.product_data.product_name': 'text',
'cve.CVE_data_meta.ID': 'text'
}, {name: 'vendor_product_text_index'})
answered Jan 2 at 19:46
JohnnyHKJohnnyHK
212k41451375
212k41451375
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54011835%2fmongodb-create-index-of-all-text-values-of-a-key-inside-arrays%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown