Могу ли я сделать запрос дважды, чтобы получить более конкретное значение в mongoDB? - PullRequest
0 голосов
/ 18 августа 2011

Например, есть группа с именем "A", которая является массивом.

И есть другая группа с именем "B", которая внутри группы "A" также является массивом.

Я хочу найти и обновить элементы группы "B".

Я попытался запросить цепочечный запрос, как в jQuery.

db.collection.findOne({"group":"A"}).findOne({"society":"B"})

примерно так ...

но это не работает.Но главное в том, что я хочу запрашивать элементы группы в группе.

Есть предложения по этому поводу?

Если вы дадите мне советы, особенно в отношении реализации PHP, это будет очень полезно

Ответы [ 2 ]

2 голосов
/ 18 августа 2011

Может быть, я что-то неправильно понимаю, но что не так с:

db.collection.findOne({"group":"A", "society":"B"})

Также обратите внимание, что findOne возвращает только один документ.

0 голосов
/ 18 августа 2011

Предположим, что ваш документ выглядит примерно так:

db.mycol.insert( {
    "_id": 1,
    "group": "A",
    "societies": [
        {"society": "A", "name": "Alpha" },
        {"society": "B", "name": "Beta" }
    ]
} );

Затем в оболочке Mongo вы можете получить нужный документ с помощью запроса:

var group = db.mycol.findOne( { "group": "A" } );

И затем отфильтроватьвниз по его полям, используя некоторый клиентский JavaScript:

var societyB = group.societies.filter(function (val) {
    return (val.society == "B");
} );

printjson(societyB);

Вы можете сделать что-то подобное с драйвером PHP.Ключ состоит в том, чтобы выполнить действие в отдельных шагах: сначала захватите интересующий вас документ;затем фильтруйте и манипулируйте его полями;затем сохраните его обратно в базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...