I have 2 collections, Authors and Books and I want to use react-awesome-query-builder to enable the user to query the data however they like, here are my schemas and data
Authors collection
{id: 1, name: 'JK Rowling', gender: 'F'},
{id: 2, name: 'Roald Dahl', gender: 'M'},
{id: 3, name: 'Dr Seuss', gender: 'M'}
Books collection
{id: 1, author_id: 1, title: 'Harry Potter and the Philosophers Stone', year: 1997},
{id: 2, author_id: 1, title: 'Harry Potter and the Goblet of Fire', year: 2000},
{id: 3, author_id: 2, title: 'Charlie and the Chocolate Factory', year: 1964},
{id: 4, author_id: 2, title: 'James and the giant peach', year: 1961},
{id: 5, author_id: 3, title: 'Green eggs and ham', year: 1960},
{id: 6, author_id: 3, title: 'The cat in the hat', year: 1957}
I want to be able to build query to 'show me all authors that released books in the 1960s', and it return me the mongo query allows me to query, which when executed returns the following results:
{id: 2, name: 'Roald Dahl'},
{id: 3, name: 'Dr Seuss'}
I am not sure how to arrange my data, one collection of 'authors' with embedded array of 'books' documents, or two separate collections or a combination of the two?
Mongo works well with embedded documents but not sure of the capability of react-awesome-query-builder?
It appears that $elemmatch support has been added to react-awesome-query-builder so I just needed to change my !struct config to !group and voila!
Related
I'm creating a project which is store a tree of generation of a family, i'm strugle while update a list when reordered the list.
I'm currently updated each person's childrens but i have duplicate person object between the root list and the child list.
For example, i have a list with 3 persons:
[
{id: 1, name: 'Duc Tran', children: []},
{id: 2, name: 'Jackie Tran', children: []}
{id: 3, name: 'Duck Tran', children: []}
]
and after move the person with id: 1 into the person with id: 2 then i wan't it to show the array like this
[
{id: 2, name: 'Jackie Tran', children: [
{id: 1, name: 'Duc Tran', children: []}
]}
{id: 3, name: 'Duck Tran', children: []}
]
Is there a way to do is at mongoose, or does it have any way to update a whole list of document ?
I have a document with users and each user haves "categories" and "tags", in both as at next:
[
{user_id: 1, categories:[
{category: uuidv4x1, score:75},
{category: uuidv4x2, score:67}
],
tags: [
{tag: "1ne", score:15},
{tag: "subjetive", score:89}
]}
How can order by category, tag but too by score, if i have:
[
{id: 1, category: uuidv4x6, tags:["1ne", "optimized"]},
{id: 2, category: uuidv4x2, tags:["1ne", "subjetive"]},
{id: 3, category: uuidv4x1, tags:["home", "car"]}
]
Before to all, thanks so much.
I expect sort my find for better matches, customize articles.
I receive an array of product objects like such from my backend.
products = [
{id: 1, price: 10, category: "food", name: "apples"},
{id: 2, price: 5, category: "supplies", name: "spoons"},
{id: 3, price: 15, category: "pets", name: "cat treats"},
{id: 4, price: 9, category: "food", name: "oranges"},
// ...
]
I am looking to render all my products as strips based on their category in a specific order of priority (similar to how Netflix aligns their shows). I don't want them displayed in random order, such as the category strip of food being at the top, the next category strip being pets, etc.
I currently decided to create a map object since it keeps order as followed:
let filteredProducts = new Map([
["food", []],
["pets", []],
["supplies", []],
// ...
])
for (let product of products) {
let category = product["category"]
filteredProducts.get(category).push(product)
}
The goal is to then iterate through the map object and return multiple React Component of category strips from top to bottom.
My question is, I can't help but feel that there are more efficient ways to render this as I don't see map objects being utilized commonly. Are there more efficient and frequently used ways to filter and render by priority or is this in the right direction?
I do believe there is more easier way to do this using Array sort function.
Please consider the snippet below.
const products = [
{id: 1, price: 10, category: "food", name: "apples"},
{id: 2, price: 5, category: "supplies", name: "spoons"},
{id: 3, price: 15, category: "pets", name: "cat treats"},
{id: 4, price: 9, category: "food", name: "oranges"},
// ...
]
const priority = [
'food',
'supplies',
'pets'
]
const orderedProducts = products.sort(
(p1, p2) => priority.indexOf(p1.category) - priority.indexOf(p2.category)
);
Let me know if this looks much cleaner & easier approach.
I am trying to create and connect some nodes using the array below. So in the end there would be 4 nodes connected to each other according to their from and to values. Any ideas on how to do it in React?
roads = [
{
id: 1,
from: {id: 111, name: “Company X”},
to: {id: 222, name: “Station 1“}
},
{
id: 2,
from: {id: 222, name: “Station 1“},
to: {id: 333, name: “Station 2“}
},
{
id: 3,
from: {id: 333, name: “Station 2”},
to: {id: 444, name: “Company Y”}
}
]
I think , you should use Normalized State. It's easy way to create your Nodes ^^
I have an array of objects with unique IDs:
[{id: 1, score: 33}, {id: 23, score: 50}, {id:512, score: 27}, ...]
I also have an array of User records with matching IDs. The user records have "name" but not "score":
[{id: 1, name: "Jon"}, {id: 23, name: "Tom"}, {id: 512, name: "Joey"}, ...]
How can I create a single array with each id, name, and score?
[{id: 1, name: "Jon", score: 33}, {id: 23, name: "Tom", score: 50}, {id: 512, name: "Joey", score: 27}, ...]
I tried merge, combine, filter, etc but haven't found the Ruby function to accomplish this.
Assuming that in users there is always record with corresponding :id from scores:
scores = [{id: 1, score: 33}, {id: 23, score: 50}, {id:512, score: 27}]
users = [{id: 1, name: "Jon"}, {id: 23, name: "Tom"}, {id: 512, name: "Joey"}]
scores = scores.map { |score| score.merge(users.find { |user| user[:id] == score[:id] }) }
# => [{:id=>1, :score=>33, :name=>"Jon"}, {:id=>23, :score=>50, :name=>"Tom"}, {:id=>512, :score=>27, :name=>"Joey"}]
Hope that puts you in proper direction!
You can use an intermediate Hash.
hsh = Hash[ a1.map {|h| [h[:id], h[:score]]} ]
# => {1=>33, 23=>50, 512=>27}
a2.map {|h| h[:score] = hsh[h[:id]]; h}
# => [{:id=>1, :name=>"Jon", :score=>33}, {:id=>23, :name=>"Tom", :score=>50}, {:id=>512, :name=>"Joey", :score=>27}]
If, as in the example, scores[i][:id] = users[i][:id] for all i, and you are using v1.9+ (where key insertion order is maintained), you could write:
scores.zip(users).each_with_object({}) do |(sh,uh),h|
h.update(sh).update(uh)
end
Would I use this? Would you?