首页 > 解决方案 > 我想在对象数组中进行搜索

问题描述

我有一个带有“数据库”的集合,其中有一个包含对象的数组......我正在尝试使用他的关键字在这些对象中搜索,并且我只得到 1 个对象返回,我想返回所有包含关键词

搜索代码

Database.find({ 'data.words' : { "$in" : ["facebook"]}}, { 'data.$': 1, });

数据结构示例

{
    "_id" : ObjectId("5e331a85ec9a8548744899a9"),
    "uuid" : "XXXXX",
    "data" : [ 
            {
                    "words" : ["facebook"],
                    "status" : 0,
                    "uid" : "XXXXX",
                    "details" : {}
            },
            {
                "words" : ["youtube", "facebook"],
                "status" : 0,
                "uid" : "XXXXX",
                "details" : {}
        }
}

标签: node.jsmongodbmongoose

解决方案


文档

 {
      "_id" : ObjectId("5e33fee6bc9987050fc40550"),
      "uuid" : "XXXXX",
      "data" : [ 
          {
              "words" : [ 
                  "facebook"
              ],
              "status" : 0,
              "uid" : "12345",
              "details" : {}
          }, 
          {
              "words" : [ 
                  "youtube", 
                  "facebook"
              ],
              "status" : 0,
              "uid" : "34567",
              "details" : {}
          }
      ]
  }

询问

 var wordsList = ["facebook"];

  db.collectionName.find({ 'data.words' : { "$in" : wordsList }})
       .map(function(list){
           var results = [];
           list.data.forEach(function (dataListElement){

               if(dataListElement.words.filter(value => wordsList.includes(value)).length > 0){
                   results.push(dataListElement);
               }
            })
           return results;
        }
   );

结果

  [
      [ 
          {
              "words" : [ 
                  "facebook"
              ],
              "status" : 0,
              "uid" : "12345",
              "details" : {}
          }, 
          {
              "words" : [ 
                  "youtube", 
                  "facebook"
              ],
              "status" : 0,
              "uid" : "34567",
              "details" : {}
          }
      ]
  ]

推荐阅读