如何从猫鼬的数组中找到对象

Posted

技术标签:

【中文标题】如何从猫鼬的数组中找到对象【英文标题】: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'
 

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

【问题讨论】:

【参考方案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 了解更多信息。 让我知道它是否能解决您的问题。

【讨论】:

感谢您的回复。你的回答给了我整个数组。但我只想要数组的特定对象。如果您有任何建议,请回复我。

以上是关于如何从猫鼬的数组中找到对象的主要内容,如果未能解决你的问题,请参考以下文章

如何从猫鼬的另一个集合中计算文档?

是否可以从猫鼬的文档中获取模型?

从猫鼬中的数组对象中选择特定项目

在猫鼬的子数组中获取具有匹配对象的对象

在猫鼬的子数组中获取具有匹配对象的对象

如何从猫鼬中获取类型化的对象