开发者

Can I query twice to get more specific value in mongoDB?

开发者 https://www.devze.com 2023-03-29 01:39 出处:网络
For an example, there is a group called \"A\" which is an array. And there is another group called \"B\" which is inside of group \"A\" also an array.

For an example, there is a group called "A" which is an array.

And there is another group called "B" which is inside of group "A" also an array.

I want to find and update group "B" elements.

I tried to query chain-like query like in jQuery.

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

something like this..

but this does not work. But main point is that I want to query group elements in group.

Any suggestion on doing this?

If you give me 开发者_开发问答advice especially with PHP implementation, it will be really helpful


Maybe I am misunderstanding something, but what is wrong with:

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

Also note that findOne only returns one document.


Assuming your document looks something like this:

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

Then in the Mongo shell, you can retrieve the document you want using a query:

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

And then further filter down on its fields using some client-side JavaScript:

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

printjson(societyB);

You'd be able to do something similar with the PHP driver. The key is to perform the action in separate steps: first grab the document you're interested in; then filter and manipulate its fields; then save it back to the database.

0

精彩评论

暂无评论...
验证码 换一张
取 消