powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / MongoDB. выборка полей из нескольких коллекций
7 сообщений из 7, страница 1 из 1
MongoDB. выборка полей из нескольких коллекций
    #38938416
ASukhov1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть две коллекции связанные по первичному и внешнему ключу.
Первая коллекция:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
OPERCODE:
{
  "OPERCODE_ID" <----Первичный ключ
  "OPERNAME" 
  "OPERDESCRIP" 
  "RECSTATE"<---Внешний ключ
} 


Вторая коллекция:
Код: javascript
1.
2.
3.
4.
5.
RECSTATES:
{
  "RECSTATE" <----Первичный ключ
  "NAME"
}


Вопрос: как мне в MongoDB реализовать следующий запрос (в MS SQL SERVER)?:
Код: sql
1.
2.
3.
select o.*,r.*
from OPERCODE as o inner join RECSTATES as r 
on o.RECSTATE=r.RECSTATE


и можно ли его вообще реализовать?
...
Рейтинг: 0 / 0
MongoDB. выборка полей из нескольких коллекций
    #38938449
ASukhov1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASukhov1986,
вот решение с помощью
Код: javascript
1.
dbref


Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
// Создаём первую таблицу, с танками
abrams = {'name':'M1 Abrams', 'weight':61300, 'speed': 48.3};
t90 = {'name': 'T-90', 'weight': 46500, 'speed': 60};
 
db.tanks.save(abrams);
db.tanks.save(t90);
 
// Смотрим её содержимое
db.tanks.find();
 
/*
{ "_id" : ObjectId("4bfa5dfd6ff2f1afd7f98394"), "name" : "M1 Abrams", "weight" : 61300, "speed" : 48.3 }
{ "_id" : ObjectId("4bfa5dfd6ff2f1afd7f98395"), "name" : "T-90", "weight" : 46500, "speed" :60 }*/
 
// получаем id обоих танков
var abrams_id = db.tanks.findOne({'name':'M1 Abrams'})._id
var t90_id = db.tanks.findOne({'name':'T-90'})._id
 
// Создаём два объекта игроков, каждый со своим танком, сохраняем в базу
player1 = {'name':'kze', 'score':0, 'tank': new DBRef('tanks', abrams_id)};
db.players.save(player1)
 
player2 = {'name':'vls', 'score':10, 'tank': new DBRef('tanks', t90_id)};
db.players.save(player2)
 
db.players.find()
 
/*
{ "_id" : ObjectId("4bfa5dfe6ff2f1afd7f98396"), "name" : "kze", "score" : 0, "tank" : { "$ref" : "tanks", "$id" : ObjectId("4bfa5dfd6ff2f1afd7f98394") } }
{ "_id" : ObjectId("4bfa5dfe6ff2f1afd7f98397"), "name" : "vls", "score" : 10, "tank" : { "$ref" : "tanks", "$id" : ObjectId("4bfa5dfd6ff2f1afd7f98395") } }*/
 
// Получаем очки игрока
db.players.findOne({'name':'kze'}).score // 0
 
// Получаем скорость танка игрока по ссылке
db.players.findOne({'name':'kze'}).tank.fetch().speed // 48.3
...
Рейтинг: 0 / 0
MongoDB. выборка полей из нескольких коллекций
    #38938504
ASukhov1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASukhov1986,
обновление документа:
Код: javascript
1.
2.
3.
4.
5.
6.
{ "_id" : ObjectId("552fbf71257fa51dc8ccddd2"), 
  "OPERCODE_ID" : 6, 
  "OPERNAME" : "Гашение", 
  "OPERDESCRIP" : "Знак снят со средства измерений и уничтожен", 
  "RECSTATE" : 2
}


на документ:
Код: javascript
1.
2.
3.
4.
5.
6.
{ "_id" : ObjectId("552fbf71257fa51dc8ccddd2"), 
  "OPERCODE_ID" : 6, 
  "OPERNAME" : "Гашение", 
  "OPERDESCRIP" : "Знак снят со средства измерений и уничтожен", 
  "RECSTATE" : [color=black][color=red]{ "$ref" : "RECSTATES", "$id" : ObjectId("552fa2f9257fa51dc8ccdd9e")}}[/color][/color]<---внешняя ссылка на элемент с id "552fa2f9257fa51dc8ccdd9e" коллекции RECSTATES
}


выполняется c помощью вот этой команды:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
db.OPERCODE.update({ "_id" : ObjectId("552fbf71257fa51dc8ccddd2"), "OPERCODE_ID" : 6, "OPERNAME" : "Гашение", "OPERDESCRIP" : "Знак снят со средства измерений и уничтожен", "RECSTATE" : 2, "$isolated" : "true" },
{"_id" : ObjectId("552fbf71257fa51dc8ccddd2"),
  "OPERCODE_ID" : 6,
  "OPERNAME" : "Гашение",
  "OPERDESCRIP" : "Знак снят со средства измерений и уничтожен",
  "RECSTATE" : { "$ref" : "RECSTATES", "$id" : ObjectId("552fa2f9257fa51dc8ccdd9e")}}
});
...
Рейтинг: 0 / 0
MongoDB. выборка полей из нескольких коллекций
    #38938542
ASukhov1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASukhov1986,
команда для получения документа из коллекции RECSTATE для текущего документа (условие {"OPERCODE_ID":1}) из коллекции OPERCODE выглядит так:
Код: javascript
1.
db.OPERCODE.findOne({"OPERCODE_ID":1}).RECSTATE.fetch()
...
Рейтинг: 0 / 0
MongoDB. выборка полей из нескольких коллекций
    #38938575
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASukhov1986, и зачем всё это? Храните полный агрегат в OPERCODE.
...
Рейтинг: 0 / 0
MongoDB. выборка полей из нескольких коллекций
    #38939062
ASukhov1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,
а если у меня две коллекции связанные первичный-внешний ключи по 20 столбцов каждая, то мне нужно создать одну коллекцию с 40 столбцами так?
...
Рейтинг: 0 / 0
MongoDB. выборка полей из нескольких коллекций
    #38939237
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASukhov1986skyANA,
а если у меня две коллекции связанные первичный-внешний ключи по 20 столбцов каждая, то мне нужно создать одну коллекцию с 40 столбцами так?"первичный-внешний ключи", "столбцы"...

В MongoDB не так всё делается :)

Ну и в первом топике видно, что RECSTATE имеет только два атрибута id и name.

P.S.: почитайте NoSQL базы данных: понимаем суть
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / MongoDB. выборка полей из нескольких коллекций
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]