pymongo - Search collection for documents that contain with $and operator case insensitive [duplicate]
This question already has an answer here:
How to AND and NOT in MongoDB $text search
1 answer
I am trying to search a collection which contains documents, collection looking like this:
['description':'Fast and Dangerous',
'colour':'blue',
'make':'ford',
'description':'slow and dangerous',
'colour':'red',
'make':'lexus']
I am trying to build a search query that will return all the documents which contain Red and Dangerous (case insensitive)
I started off with:
find("$text": "$search": "red dangerous")
However, this is certainly case insensitive, but it is an OR rather than AND.
I have read through https://docs.mongodb.com/manual/reference/operator/query/and/#op._S_and - but it means you have to refer to specific fields which could contain Red or Dangerous, rather than the entire document. What's the best way to go about this? I want my code to be professional, and I feel whatever hack I come up with really won't be. Any pointers?
python python-3.x mongodb aggregation-framework pymongo
marked as duplicate by Neil Lunn
StackExchange.ready(function()
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function()
$hover.showInfoMessage('',
messageElement: $msg.clone().show(),
transient: false,
position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
dismissable: false,
relativeToBody: true
);
,
function()
StackExchange.helpers.removeMessages();
);
);
);
Nov 12 at 8:23
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
add a comment |
This question already has an answer here:
How to AND and NOT in MongoDB $text search
1 answer
I am trying to search a collection which contains documents, collection looking like this:
['description':'Fast and Dangerous',
'colour':'blue',
'make':'ford',
'description':'slow and dangerous',
'colour':'red',
'make':'lexus']
I am trying to build a search query that will return all the documents which contain Red and Dangerous (case insensitive)
I started off with:
find("$text": "$search": "red dangerous")
However, this is certainly case insensitive, but it is an OR rather than AND.
I have read through https://docs.mongodb.com/manual/reference/operator/query/and/#op._S_and - but it means you have to refer to specific fields which could contain Red or Dangerous, rather than the entire document. What's the best way to go about this? I want my code to be professional, and I feel whatever hack I come up with really won't be. Any pointers?
python python-3.x mongodb aggregation-framework pymongo
marked as duplicate by Neil Lunn
StackExchange.ready(function()
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function()
$hover.showInfoMessage('',
messageElement: $msg.clone().show(),
transient: false,
position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
dismissable: false,
relativeToBody: true
);
,
function()
StackExchange.helpers.removeMessages();
);
);
);
Nov 12 at 8:23
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
Use$meta
aggregation with the$sort
stage. Something likedb.collection.aggregate( [ $match: $text: "$search": "red Dangerous" , $addFields: score: $meta: "textScore" , $sort: score: 1 ] )
. The text score signifies how well the document matched the search term or terms. So the best matched documents will always come on the top.
– Anthony Winzlet
Nov 11 at 15:00
That's a really interesting answer. Certainly highlighted some features I wasn't aware of. I'll put it in. It feels like my request should have a definite answer though, as in all of the requirements of the search have been met
– rlou
Nov 11 at 15:45
add a comment |
This question already has an answer here:
How to AND and NOT in MongoDB $text search
1 answer
I am trying to search a collection which contains documents, collection looking like this:
['description':'Fast and Dangerous',
'colour':'blue',
'make':'ford',
'description':'slow and dangerous',
'colour':'red',
'make':'lexus']
I am trying to build a search query that will return all the documents which contain Red and Dangerous (case insensitive)
I started off with:
find("$text": "$search": "red dangerous")
However, this is certainly case insensitive, but it is an OR rather than AND.
I have read through https://docs.mongodb.com/manual/reference/operator/query/and/#op._S_and - but it means you have to refer to specific fields which could contain Red or Dangerous, rather than the entire document. What's the best way to go about this? I want my code to be professional, and I feel whatever hack I come up with really won't be. Any pointers?
python python-3.x mongodb aggregation-framework pymongo
This question already has an answer here:
How to AND and NOT in MongoDB $text search
1 answer
I am trying to search a collection which contains documents, collection looking like this:
['description':'Fast and Dangerous',
'colour':'blue',
'make':'ford',
'description':'slow and dangerous',
'colour':'red',
'make':'lexus']
I am trying to build a search query that will return all the documents which contain Red and Dangerous (case insensitive)
I started off with:
find("$text": "$search": "red dangerous")
However, this is certainly case insensitive, but it is an OR rather than AND.
I have read through https://docs.mongodb.com/manual/reference/operator/query/and/#op._S_and - but it means you have to refer to specific fields which could contain Red or Dangerous, rather than the entire document. What's the best way to go about this? I want my code to be professional, and I feel whatever hack I come up with really won't be. Any pointers?
This question already has an answer here:
How to AND and NOT in MongoDB $text search
1 answer
python python-3.x mongodb aggregation-framework pymongo
python python-3.x mongodb aggregation-framework pymongo
edited Dec 20 at 18:01
![](https://i.stack.imgur.com/ZbXpV.jpg?s=32&g=1)
![](https://i.stack.imgur.com/ZbXpV.jpg?s=32&g=1)
Anthony Winzlet
13.6k41239
13.6k41239
asked Nov 11 at 14:01
rlou
555
555
marked as duplicate by Neil Lunn
StackExchange.ready(function()
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function()
$hover.showInfoMessage('',
messageElement: $msg.clone().show(),
transient: false,
position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
dismissable: false,
relativeToBody: true
);
,
function()
StackExchange.helpers.removeMessages();
);
);
);
Nov 12 at 8:23
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
marked as duplicate by Neil Lunn
StackExchange.ready(function()
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function()
$hover.showInfoMessage('',
messageElement: $msg.clone().show(),
transient: false,
position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
dismissable: false,
relativeToBody: true
);
,
function()
StackExchange.helpers.removeMessages();
);
);
);
Nov 12 at 8:23
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
Use$meta
aggregation with the$sort
stage. Something likedb.collection.aggregate( [ $match: $text: "$search": "red Dangerous" , $addFields: score: $meta: "textScore" , $sort: score: 1 ] )
. The text score signifies how well the document matched the search term or terms. So the best matched documents will always come on the top.
– Anthony Winzlet
Nov 11 at 15:00
That's a really interesting answer. Certainly highlighted some features I wasn't aware of. I'll put it in. It feels like my request should have a definite answer though, as in all of the requirements of the search have been met
– rlou
Nov 11 at 15:45
add a comment |
Use$meta
aggregation with the$sort
stage. Something likedb.collection.aggregate( [ $match: $text: "$search": "red Dangerous" , $addFields: score: $meta: "textScore" , $sort: score: 1 ] )
. The text score signifies how well the document matched the search term or terms. So the best matched documents will always come on the top.
– Anthony Winzlet
Nov 11 at 15:00
That's a really interesting answer. Certainly highlighted some features I wasn't aware of. I'll put it in. It feels like my request should have a definite answer though, as in all of the requirements of the search have been met
– rlou
Nov 11 at 15:45
Use
$meta
aggregation with the $sort
stage. Something like db.collection.aggregate( [ $match: $text: "$search": "red Dangerous" , $addFields: score: $meta: "textScore" , $sort: score: 1 ] )
. The text score signifies how well the document matched the search term or terms. So the best matched documents will always come on the top.– Anthony Winzlet
Nov 11 at 15:00
Use
$meta
aggregation with the $sort
stage. Something like db.collection.aggregate( [ $match: $text: "$search": "red Dangerous" , $addFields: score: $meta: "textScore" , $sort: score: 1 ] )
. The text score signifies how well the document matched the search term or terms. So the best matched documents will always come on the top.– Anthony Winzlet
Nov 11 at 15:00
That's a really interesting answer. Certainly highlighted some features I wasn't aware of. I'll put it in. It feels like my request should have a definite answer though, as in all of the requirements of the search have been met
– rlou
Nov 11 at 15:45
That's a really interesting answer. Certainly highlighted some features I wasn't aware of. I'll put it in. It feels like my request should have a definite answer though, as in all of the requirements of the search have been met
– rlou
Nov 11 at 15:45
add a comment |
1 Answer
1
active
oldest
votes
You can use $meta
aggregation with the $sort
stage. Something like
db.collection.aggregate([
"$match": "$text": "$search": "red Dangerous" ,
"$addFields": "score": "$meta": "textScore" ,
"$sort": "score": 1
])
The text score signifies how well the document matched the search term or terms. So the best matched documents will always come on the top.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use $meta
aggregation with the $sort
stage. Something like
db.collection.aggregate([
"$match": "$text": "$search": "red Dangerous" ,
"$addFields": "score": "$meta": "textScore" ,
"$sort": "score": 1
])
The text score signifies how well the document matched the search term or terms. So the best matched documents will always come on the top.
add a comment |
You can use $meta
aggregation with the $sort
stage. Something like
db.collection.aggregate([
"$match": "$text": "$search": "red Dangerous" ,
"$addFields": "score": "$meta": "textScore" ,
"$sort": "score": 1
])
The text score signifies how well the document matched the search term or terms. So the best matched documents will always come on the top.
add a comment |
You can use $meta
aggregation with the $sort
stage. Something like
db.collection.aggregate([
"$match": "$text": "$search": "red Dangerous" ,
"$addFields": "score": "$meta": "textScore" ,
"$sort": "score": 1
])
The text score signifies how well the document matched the search term or terms. So the best matched documents will always come on the top.
You can use $meta
aggregation with the $sort
stage. Something like
db.collection.aggregate([
"$match": "$text": "$search": "red Dangerous" ,
"$addFields": "score": "$meta": "textScore" ,
"$sort": "score": 1
])
The text score signifies how well the document matched the search term or terms. So the best matched documents will always come on the top.
answered Nov 11 at 16:52
![](https://i.stack.imgur.com/ZbXpV.jpg?s=32&g=1)
![](https://i.stack.imgur.com/ZbXpV.jpg?s=32&g=1)
Anthony Winzlet
13.6k41239
13.6k41239
add a comment |
add a comment |
Use
$meta
aggregation with the$sort
stage. Something likedb.collection.aggregate( [ $match: $text: "$search": "red Dangerous" , $addFields: score: $meta: "textScore" , $sort: score: 1 ] )
. The text score signifies how well the document matched the search term or terms. So the best matched documents will always come on the top.– Anthony Winzlet
Nov 11 at 15:00
That's a really interesting answer. Certainly highlighted some features I wasn't aware of. I'll put it in. It feels like my request should have a definite answer though, as in all of the requirements of the search have been met
– rlou
Nov 11 at 15:45