【问题标题】:How can i find object from an array in mongoose如何从猫鼬的数组中找到对象
【发布时间】:2014-01-14 04:25:38
【问题描述】:

我有如下架构:-

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

现在我只想找到部分的对象而不是整行。就像如果我通过 sec 值,我只想要那个 sec 对象的 s.data 的值。

示例:-

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

结果应该是这样的 -

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

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

【问题讨论】:

    标签: arrays node.js mongodb object mongoose


    【解决方案1】:

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

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

    输出:

    {
      "s": [
        {
          "data": [ ],
          "sec": "52b9830cadaa9d2732000005"
        }
      ]
    }
    

    【讨论】:

      【解决方案2】:

      不使用 Mongo 或 db,但使用 Pure JavaSript 技能 这是您提到的解决方案 Node.js,它将执行以下任务。 p>

      架构

         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('search_id');

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

      输出:

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

      工作演示在这里 - http://jsbin.com/UcobuVOf/1/watch?js,console

      【讨论】:

        【解决方案3】:

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

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

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

        请查看http://docs.mongodb.org/manual/reference/method/db.collection.find 了解更多信息。 让我知道它是否能解决您的问题。

        【讨论】:

        • 感谢您的回复。你的回答给了我整个数组。但我只想要数组的特定对象。如果您有任何建议,请回复我。
        猜你喜欢
        • 1970-01-01
        • 2019-03-28
        • 1970-01-01
        • 2021-01-24
        • 1970-01-01
        • 2021-08-16
        • 2015-12-28
        • 2021-05-06
        • 2019-07-06
        相关资源
        最近更新 更多