Mongo $ in / $ all无法正常工作

时间:2018-03-22 09:11:42

标签: node.js database mongodb mongoose mongoose-schema

使用提供的查询考虑此NodeJS路由:

app.post("/api/test", async function(req, res) {

    const findTags = ["banana", "produce", "yellow", "organic", "fruit"];

    Product.find({
      tags: {
        $size: findTags.length,
        $in: findTags
      }
    })
      .sort({ date: "descending" })
      .limit(20)
      .exec(function(err, docs) {
        console.log("Query found these products: ");
        console.log(docs);
      });
});

在我的MongoDB中,我有以下两个条目:

{
    name: "Banana",
    "tags": [
        "banana",
        " produce",
        " yellow",
        " organic",
        " fruit"
    ]
},
{
    name: "Blueberry",
    "tags": [
        "organic",
        " produce",
        " blue",
        " blueberries",
        " fruit"
    ]
}

我希望查询只返回Banana

实际结果BananaBlueberry都已退回。

所以我尝试用$in替换$all,而我得到的只是一个空数组。意思是它没有找到任何东西!这怎么可能?

我想要做的事情:我想查找至少所有Products的所有findTags。如果产品还有100个标签,只要它包含我正在寻找的所有标签,那就没关系。

如何更改查询以实现此目的?

2 个答案:

答案 0 :(得分:1)

$all不适合您,因为文档中的tags与查询中的tags不匹配。 某些tags在文档中包含尾随空格(例如produce

答案 1 :(得分:-3)

你必须写这样的查询。而且您还必须从数据库中删除空格。或者用空格查询标签。

var tagsArr = ["banana", "produce", "yellow", "organic", "fruit"];
var query = {tags: {$all: tagsArr } };

Product.find(query).sort({ date: "descending" })
  .limit(20)
  .exec(function(err, docs) {
    console.log("Query found these products: ");
    console.log(docs);
  });