gpt4 book ai didi

node.js - 在 MongoDB 中查询具有非空数组交集的文档

转载 作者:可可西里 更新时间:2023-11-01 09:31:35 25 4
gpt4 key购买 nike

所以 - 我有一个 Heroku + Node + Express + MongoDB 应用程序正在开发中,我整天都在玩弄,试图弄清楚如何获得我想要的 mongo 查询。在 mongo 集合中,每个文档都有一个属性“fruits”,它是一个字符串数组,如

fruits : ['apple', 'orange', 'lemon']

水果的大小和含量是任意的。我想在数据库中查询所有文档,这些文档的 fruits 数组至少有一个元素与我在进行查询时提供的另一个数组相同。我怎样才能做到这一点?

到目前为止,我尝试过的主要是 $where 查询和一些服务器端 JS。如果我做类似的事情

mongo.Db.connect(mongoUri, function(err, db) {
db.collection('Users', function(er, collection) {
collection.find( {$where: 'false' } ).toArray(function(err, matches){

console.log(matches)
...

});
});
});

我得到一个空数组 - 很好!如果我将 false 更改为 true,我将获得整个数据库 - 也很好!像下面这样的事情变得不太好:

collection.find( {$where: function(){return false} } ).toArray(function(err, matches){...

我又得到了整个数据库!我认为这很明显会返回与我上面给出的第一个示例相同的空数组,按照 http://docs.mongodb.org/manual/reference/operator/query/where/ 中提供的语法。

我正在尝试上面的方法只是为了看看我是否可以让 任何东西 与 $where 一起工作,但是当我尝试将服务器端 JS 添加到组合中时会出现更多问题。我看了一下 http://docs.mongodb.org/manual/tutorial/store-javascript-function-on-server/

并将以下内容添加到我的数据库中的 system.js 集合中:

{
"_id": "isMatch",
"value": "function(){return false}"
}

并用以下行修改了上面的示例

collection.find( {$where: 'isMatch()' } ).toArray(function(err, matches){...

当 isMatch 评估字符串时(我假设它必须评估字符串),认为 isMatch 现在会成为 mongo 的技巧,并且字符串语法是上述游戏中的最佳选择。遗憾的是,这导致控制台日志为 null - 另一种错误,我再次期待一个空数组。

谁能帮我实现我上面描述的查询?我怀疑如果你们好心的人可以帮助我理解 1. 如何使用函数语法而不是 $where 的字符串语法,以及 2. 如何在 system.js 中正确声明 JS 函数与 $where 一起使用。提前致谢!

最佳答案

当我在 shell 中尝试时,您的 $where 查询工作正常,但您不需要为此查询使用 $where。相反,您可以使用以 fruits 字段为目标的 $in 来查找至少包含一个匹配水果的文档:

var fruits = ['apple', 'orange', 'lemon'];
db.test.find({fruits: {$in: fruits}});

关于node.js - 在 MongoDB 中查询具有非空数组交集的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20831920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com