使用 Mongoose 查询对象数组

问题描述

假设我在猫鼬中有这样一个集合,我有这样一个模板

[
  {
    id: 123,"arrayvalue": [
      {
        id: 355,name: "jhon",job: true
      },{
        id: 155,name: "clarck",job: false
      },{
        id: 275,name: "orie",]
  }
]

我目前正在使用 nodejs express

我想要做的就是获取仅值为 true 的对象。

我希望输出是这样的

[
  { id : 123,"arrayvalue": [
      {
        "id": 355,"job": true,"name": "jhon"
      },{
        "id": 275,"name": "orie"
      }
    ]
  }
]

找了很多地方都没找到,希望对项目有帮助。你可以帮忙

我使用:“猫鼬”:“^5.12.2”

解决方法

选项 - 1

演示 - https://mongoplayground.net/p/z1BwqmFh7Nq

$unwind

$push

$group

$match

db.collection.aggregate([
{ $unwind: "$arrayvalue" },// break into individual documents
{ $match: { "arrayvalue.job": true } },// match query
{
  $group: { // join the document back
    _id: "$_id",arrayvalue: { $push: "$arrayvalue"}
  }
}])

选项 - 2

如果你想用 JS 来做:-

const data = [{
  id: 123,"arrayvalue": [{
      id: 355,name: "jhon",job: true
    },{
      id: 155,name: "clarck",job: false
    },{
      id: 275,name: "orie",]
}]

const arr = data.map((d) => {
  if (d.arrayvalue) {
    d.arrayvalue = d.arrayvalue.filter(e => e.job === true);
  }
  return d;
});
console.log(arr);

,

var obj ={
    id : 123,arrayvalue : [
     
        {
     id : 355,name : "jhon",job : true
        },{
     id : 155,name : "clarck",job : false
        },{
     id : 275,name : "orie",]
};
    
    var response = {}; 
    for (var i = 0; i < obj.arrayvalue.length; i++) {
      if (obj.arrayvalue[i].job) {
        response[i] = obj.arrayvalue[i];
      }
    }
    console.log(response);