如何在mongoose中找到数组中的对象

时间:2013-12-26 13:57:31

标签: arrays node.js mongodb object mongoose

我有以下架构: -

var P = {
     s : [{
         data : [],
         sec : mongoose.Schema.Types.ObjectId
     }]
 };

现在我想只查找截面的对象而不是整行。如果我传递sec值,我只想要该s.data个对象的sec值。

示例: -

{ s : [ 
    {
       data : [],
       sec : '52b9830cadaa9d273200000d'
    },{
        data : [],
       sec : '52b9830cadaa9d2732000005'
    }
  ]
}

结果应该看起来像 -

 {
    data : [],
    sec : '52b9830cadaa9d2732000005'
 }

我不想要所有的整排。可能吗?如果是,请帮助我。

3 个答案:

答案 0 :(得分:9)

您可以使用$elemMatch投影运算符将s之类的数组字段限制为单个匹配元素,但不能使用{删除文档的s级别{1}}。

find

输出:

db.test.find({}, {_id: 0, s: {$elemMatch: {sec: '52b9830cadaa9d2732000005'}}})

答案 1 :(得分:0)

您始终可以使用find()获取某些字段的值。例如,在您的情况下:

db.collectionName.find({},{s.data:1})

所以第一个括号是应用任何条件或查询,在第二个括号中你必须将字段定义为1(仅获取那些字段值)。

请查看http://docs.mongodb.org/manual/reference/method/db.collection.find了解详情。 如果它能解决您的问题,请告诉我。

答案 2 :(得分:0)

不是进入Mongo或db但是使用纯JavaSript技能这里是解决方案,因为你提到了 Node.js ,它将执行下面的执行任务。

<强>模式

   var P = { s : [ 
            {
             data : [],
             sec : '52b9830cadaa9d273200000d'
              },{
             data : [],
             sec : '52b9830cadaa9d2732000005'
              }
         ]
    };

搜索方法代码

var search = function (search_sec){
     for (var i=0; i<(P.s.length);i++){

       var pointer = P.s[i].sec;
       var dataRow = P.s[i];

        if((pointer) === search_sec ){

             console.log(dataRow);

          }
      }

};

以下是如何致电 - 搜索('search_id');

例如输入: 搜索( '52b9830cadaa9d2732000005');

<强>输出:

 [object Object] {
                  data: [],
                  sec: "52b9830cadaa9d2732000005"
                  }

此处的工作演示 - http://jsbin.com/UcobuVOf/1/watch?js,console