【问题标题】:I want to do a search within an array of objects我想在对象数组中进行搜索
【发布时间】:2020-05-16 10:28:18
【问题描述】:

我有一个带有“数据库”的集合,其中有一个包含对象的数组......我正在尝试使用他的关键字在这些对象中搜索,并且我只得到 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" : {}
        }
}

【问题讨论】:

  • 不清楚,你期待什么结果。请提供一个示例退货文件。
  • 我想接收数组中包含关键字的所有对象...
  • 所以您想在返回的文档中接收过滤结果?
  • 也许只是find({ 'data.words' : "facebook"}, { "data": 1})?
  • 最好能包含 3-4 个具有自己的 "uuid" 的顶级对象:"XXXXX" 然后用 2-3 个示例说明您想要的返回对象是什么。它只是 uuid 还是内部匹配数组或内部匹配数组以及 uuid?

标签: node.js mongodb mongoose


【解决方案1】:

文档

 {
      "_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" : {}
          }
      ]
  ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多