Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #2071 (permalink)  
Старый 09.12.2016, 22:38
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от kobezzza
Советую не верить бенчам
Правильно советуешь. Я им изначально не верю
Вместе с тем мне нужно выбрать ДБ, которая бы отвечала определенным требованиям, среди которых:
1. отказоустройчивость
2. масштабируемость (без джойнов)
3. сравнительно легкая "эмуляция" отношений (one-to-many etc.)
4. транзакции
5. document, key-value, graph БД
6. ...
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #2072 (permalink)  
Старый 20.12.2016, 20:07
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Вопрос по запросам в Mongoose / MongoDB:

Требуется выбрать все Issue пользователя, которые:
- или были созданы пользователем (issue.authorId === user.id)
- или были назначены на пользователя (issue.assigneeId === user.id)
- или те, в которых пользователь оставлял комментарии (notes.notableId.contains(issue.id))

Есть три схемы (ниже они упрощены)

// Issue
const schema = new mongoose.Schema(
  {
    id: Number,
    authorId: Number,
    assigneeId: Number
  }
);
schema.virtual('notes', {
  ref: 'Note',
  localField: 'id',
  foreignField: 'noteableId'
});

// Note
const schema = new mongoose.Schema(
  {
    id: Number,
    noteableId: Number,
    authorId: Number
  }
);

// User
const schema = new mongoose.Schema(
  {
    id: Number
  }
);



И два запроса
let id = 21; // user.id пользователь
let $in = yield Note.find({authorId:id}).distinct('noteableId'); // все id комментариев пользователя
this.response.body = yield Issue.find({
  $or: [
    {authorId:id},
    {assigneeId:id},
    {id:{$in}}
  ]
});



Можно ли это сделать в 1 запрос?

Спасибо.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #2073 (permalink)  
Старый 20.12.2016, 23:10
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

Что-то закреплённых тем в оффтопике дофига. Не сразу свою новую тему нашёл. Придётся прибегнуть к пиару чёрному: Как вы храните пароли и проверяете их корректность
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
Ответить с цитированием
  #2074 (permalink)  
Старый 21.12.2016, 13:17
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Tim
Придётся прибегнуть к пиару чёрному: Как вы храните пароли и проверяете их корректность
Не ходите туда! Лучше ответьте на мой вопрос выше
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #2075 (permalink)  
Старый 21.12.2016, 13:46
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

kobezzza, ты знаешь о фреймворке spring из java?
Как думаешь что то похожее на nodejs имеет смысел?
примерно так это выглядит в данный момент, я эксперементирую
import {Controller} from "../../lib/decorators/index";
import {RequestMapping} from "../../lib/decorators/index";
import {RequestMethod} from "../../lib/decorators/index";


@Controller("/")
export default class {


    @RequestMapping("/test")
    async getTestPage(ctx) {
        console.log(ctx.mongodb);
        return Promise.resolve("hello test");
    }

}

работает это чудо с koa
P.s убрал с темы Tim и перенес сюда)
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #2076 (permalink)  
Старый 21.12.2016, 21:51
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

cyber, про спринг знаю, что это такой фреймворк-фреймворков, но я в общем не явист. В твоём варианте мне главным образом не нравится, что придётся придумывать имена для post, delete и т.д. запросов )

nerv_, если коллекции разные, то тока в 2-ва запроса, но не вижу ничего плохого в этом, кроме разве что неудобства, но это плата за коробочный шардинг.
__________________
kobezzza
code monkey
Ответить с цитированием
  #2077 (permalink)  
Старый 21.12.2016, 22:06
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

kobezzza,
это будет примерно так
import {Controller} from "../../lib/decorators/index";
import {RequestMapping} from "../../lib/decorators/index";
import {RequestMethod} from "../../lib/decorators/index";


@Controller("/")
export default class {


    @RequestMapping({ value: "/test", method: RequestMethod.POST} )
    async getTestPagePost(ctx) {
        console.log(ctx.mongodb);
        return Promise.resolve("hello test");
    }

@RequestMapping({ value: "/test", method: RequestMethod.GET} )
    async getTestPagePost(ctx) {
        console.log(ctx.mongodb);
        return Promise.resolve("hello test");
    }

}
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #2078 (permalink)  
Старый 21.12.2016, 22:08
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

cyber, многословно, да и IDE же будет ругаться, что в классе 2 метода с именем getTestPagePost
__________________
kobezzza
code monkey
Ответить с цитированием
  #2079 (permalink)  
Старый 21.12.2016, 23:14
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

kobezzza, окей, а как лучше? как ты думаешь?
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #2080 (permalink)  
Старый 21.12.2016, 23:23
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от cyber Посмотреть сообщение
kobezzza, окей, а как лучше? как ты думаешь?
Ну я использую простую модель, что для указания метода мы просто использую тег строки шаблона:

@controller()
class myController {
  // В качестве имени я юзаю путь
  [GET`foo/`]() {

  }

  [POST`foo/`]() {

  }
}


Довольно удобно.
__________________
kobezzza
code monkey
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смишных картинок тред megaupload Оффтопик 3448 03.07.2023 09:47
React'а тред melky Оффтопик 246 13.11.2016 08:07
Webpack'а тред nerv_ Сборка проекта, утилиты 58 07.05.2016 13:46
Смешных историй тред monolithed Оффтопик 11 04.03.2015 04:20
Смишных видео с намеком тред godofjavascript Оффтопик 4 30.12.2012 23:50