在mongo文档内搜索数组

时间:2013-06-13 16:49:19

标签: arrays mongodb search

在我的mongo集合中称为像素,我有像样本一样的文档 我正在寻找一种方法来搜索actions.tags文件的一部分?

db.pixelsactifs.actions.find({tags:{$in : ["Environnement"]}})
db.pixelsactifs.find({actions.tags:{$in : {Environnement}})

不起作用。我也在寻找PHP等价物?

我也问自己应该制作一个“动作”集合,而不是把所有内容放在一个文档中 我是mongo的新手,所以任何有关构建数据库的好教程都会很棒

感谢您的见解

{
  "_id": { $oid": "51b98009e4b075a9690bbc71" },
  "name": "open Atlas",
  "manager": "Tib Kat",
  "type": "Association",
  "logo": "",
  "description": "OPEN ATLAS",
  "actions": [
    {
      "name": "Pixel Humain",
      "tags": [ "Toutes thémathiques" ],
      "description": "le PH agit localement",
      "images": [],
      "origine": "oui",
      "website": "www.echolocal.org"
    }
  ],
  "email": "my@gmail.com",
  "adress": "102 rue",
  "cp": "97421",
  "city": "Saint louis",
  "country": "Réunion",
  "phone": "06932"
}

1 个答案:

答案 0 :(得分:1)

你可以这样尝试

              collectionName->find(array("actions.tags" => array('$in' => "Environnement")));

我认为您不需要在单独的集合中维护操作。 NoSQL为您提供了嵌入文档的更大灵活性。事件它允许子文档也被索引。 NoSQL的真正力量在于将文档合并到一起以获得更快的检索。我可以在这里看到的唯一的短暂,你不能得到子文件的一部分。 find将始终返回完整的父文档。如果要显示子文档数组的一个条目,则无法实现。它将返回整个子文档,您必须在客户端进行筛选。因此,如果您计划将行动显示为最终用户,则最好有单独的集合

请在此处阅读:http://docs.mongodb.org/manual/use-cases/