Как сделать вложенные запросы в MongoDb, которые работают как вложенные запросы выбора Sql

Я хочу сделать эффективный запрос в MongoDb, чтобы найти всех пользователей, чьи идентификаторы пользователей перечислены в группе пользователей. В идеале я хочу сделать это как один запрос к Mongodb. То, что я хочу, соответствует вложенным выборам в SQL. Я пробовал это в оболочке mongo:

db.user.save({_id:"u1", Name:"u1 name"});
db.user.save({_id:"u2", Name:"u1 name"});
db.user.save({_id:"u3", Name:"u3 name"});
db.usergroup.save({_id:"g1", Users: ["u2","u3"]});

Теперь вот выбор, который я хочу сделать, но без жесткого кодирования массива ["u2","u3"]:

db.user.find({_id:{$in:["u2","u3"]}}).forEach(printjson);

Это отлично работает и возвращает пользовательские объекты для u2 и у3.

Теперь вопрос заключается в том, как получить массив идентификаторов пользователей в операторе $in, извлеченный с помощью запроса, чтобы весь запрос можно было выполнить с помощью одного запроса.

Такой "вложенный запрос" не работает:

db.user.find({_id:{$in:db.usergroup.find({_id:"g1"},{_id:0,Users:1})}}).forEach(printjson);

Выдает эту ошибку: Вт, 27 марта, 06:17:41 неперехваченное исключение: ошибка: { "$err": "неверный запрос", "код": 12580} не удалось загрузить: mongoNestedSelect.js

1) возможно ли это в mongodb и как?

2) как это сделать с официальным драйвером С#?

14
задан ssn 27 March 2012 в 05:03
поделиться