pbatey / query-to-mongo Goto Github PK
View Code? Open in Web Editor NEWNode.js package to convert query parameters into a mongodb query criteria and options
License: MIT License
Node.js package to convert query parameters into a mongodb query criteria and options
License: MIT License
Angular.js resources generate query strings with the standard a=p format. So User.query({ age: 21 }) would generate GET: /user/?age=21. That's a problem if we want to use query-to-mongo filters with any operator other than =. For instance, User.query({ age: '>21' }) would generate GET: /user/?age=%3E21, which query-to-mongo doesn't like. It would be great if query-to-mongo would handle age=%3E21 and other comparison operators the same way it handles age%3E21.
Is it possible to use the logical operators ? Thank you
Current npm version doesn't have the merged pull requests.
Could you please update it?
Hi,
I have a use case where I need multiple url-encoded negations. In your docs these should be translated to : "Multiple not-equals comparisons are merged into a $nin operator. For example, id!=a&id!=b yields {id:{$nin:['a','b']}}."
This is not the case when they are url-encoded.
It works for single url-encoded negations e.g.:
?status=%21test translates to criteria: { status: { '$ne': 'test' }
Two negations translate to $in instead of $nin:
?status=%21test&status=%21test2 translates to criteria: { status: { '$in': [ '!test', '!test2' ] } } which is quite different to the expected { status: { '$nin': [ 'test', 'test2' ] } } and does not work.
Would it be possible to change it so that multiple url-encoded negations are translated to $nin as well?
Thanks.
Wojciech Kusch wrote me via LinkedIn:
Hi, I have a question. I use your query-to-mongo package, and I want select the amount of the speciifed field, like here in SQL:
select (count(myfiled)) as counter ....
How I should write this command?
Thanks!
Hi, in Document you point that after execration of query-to-mongo
we get some object like this:
{
criteria: {
name: 'john',
age: { $gt: 21 }
},
options: {
fields: { name: true, age: true },
sort: { name: 1, age: -1 },
offset: 10,
limit: 10
}
}
But in the case, there is not any offset when retrieving object:
const q2m = require('query-to-mongo');
const queryString = "name=john&age>21&fields=name,age&sort=name,-age&offset=10&limit=10";
Give us the following object:
{
criteria: { name: 'john', age: { '$gt': 21 } },
options:{
fields: { name: 1, age: 1 },
sort: { name: 1, age: -1 },
skip: 10,
limit: 10
},
links: [Function: links]
}
I think this offset
must be changed to skip
in the document. also as mongodb , there is not offset
key to execute it but we have skip
keyword, even in mongodb aggregation.
I believe the queryToMongo
return type, QueryToMongoResult
, is missing the optional property options.fields
.
Hi, i was trying to filter out all of the documents that doesn't contains a specified string.
Let's take for example SKU!=/.*aboca*./i
that produces {"SKU":{"$ne":"/.*aboca*./i"}
mongo filter.
Of course, mongo throws error "Can't have regex as arg to $ne." because it wants $not operator when using regex.
Is it possible to filter "not contains" with regex right now? If it is not, do you need help to implement it?
P.S: i saw that there is not "$not" anywhere in the code.
In issue #15 there was a good argument to be made that comparison operators should be able to be encoded into the value. One operator that was not handled by the changes in v0.8.0 was the check for exists or not.
?a&!b
results in { a: {"$exists": true}, b: {"$exists": false}}
as expected, but requires the '!' operator to be included in the key. We need an alternative method that encodes the '!' operator in the value.
?a=&b=!
currently results in { a: {"$exists": true}, b: "!"}
Hi thanks for this package
is search support?
I'd like to have support for logical or operation.
Kind regards,
R
I believe the interface QueryToMongoOptions
is missing the optional property keywords
.
The query is working for all parameters except the default mongodb identifier (_id).
{{base_url}}/api/formdata/my/query?_id=ObjectId("5a4de6a93eecc8aeb8882f76")
{{base_url}}/api/formdata/my/query?_id=ObjectId("5a4de6a93eecc8aeb8882f76")
Is this supported or is there a different way to query for _id?
Ran the tests and some of the date tests are failing. My local machine is in NZ which is +12/13 hours UTC. I've attached the relevant mocha output, foo.txt
I've seen these date/times issues a few times. I'll take a look at your code and see if I can make a pull request.
After more testing, I've found that all date tests fail when the local time zone is positive from GMT.
For below example code (example for id 5e8454301455190020332048)
var queryToMongo = require("query-to-mongo")
const {criteria, options} = queryToMongo({ test:'5e8454301455190020332048' });
console.log(criteria)
The returned result is
{test: Infinity}
For any other id for example for some random id 5ed0a62751dbd6008a0e71ec it works fine.
Only for few select ids for which example id 5e8454301455190020332048 shown above the result returned has Infinity.
When dedocing /word,word/i I get $in["/word","word/i"] instead of a regex.
Can you help me?
fields=name, email produces {name: true, email:true} Mongo requires {name: 1, email:1}. Note: True or false may work for later versions of Mongo but not the version we run
I've upgraded my app to NextJS 13.4.7 and still using q2m v 0.10.2 and in my API routes, I am now getting errors stating
error ReferenceError: defaultKeywords
is not defined and it references /query-to-mongo/index.js:204
This is my code:
var query = q2m(request.url)
let dist = await db
.collection(table)
.find(query.criteria, query.options)
.sort({ name: 1 })
.toArray();
Not sure if you've tested with Next 13, but just wanted to report it just in case.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.