【问题标题】:Azure Cosmos DB (mongodb) find() with '$in' query not returning anything带有“$in”查询的 Azure Cosmos DB (mongodb) find() 不返回任何内容
【发布时间】:2017-08-26 17:24:48
【问题描述】:

我的文档有一个名为“tags”的字段,它是一个字符串数组。 我正在尝试搜索“标签”中包含“关键字”的文档。 但是,这似乎不适用于 Azure Cosmos DB。 任何帮助表示赞赏。

编辑:按照其中一位评论者的要求,我用更完整的代码示例替换了我之前的帖子。

const MongoClient = require('mongodb').MongoClient;
const mongoConnectionString = process.env.MONGODB_CONNECTION_STRING;
const mongoOptions =
{
    connectTimeoutMS: 0
}

var mongoDB;

MongoClient.connect(mongoConnectionString, (err, db) => {

    if (err) throw err;

    mongoDB = db.db('mydb');

    mongoDB.collection('mycol', (err, collection) => {            
        if (err) throw err;            
        collection.find(
            {tags: {$in:['keyword']}},
            (err, cursor) => {
                if (err) throw(err);
                cursor.toArray((err, docs) => {
                    for (i = 0; i < docs.length; i++) {
                        console.log(JSON.stringify(docs));
                        db.close();
                    }
                });
            }
        );
    });
});

【问题讨论】:

  • $in 的参数是一个数组,你只是发送一个字符串。无论如何,您可能只想要{ tags: 'keyword' }。您不需要特殊的运算符来匹配“存储”在数组中的项目。相反,它是要匹配的“可能值列表”。
  • 我试过 { tags: 'keyword' }。它也不起作用。
  • 还请查看.find() 的实际 API 规范,因为您没有提供有效的参数。 .sort().limit() 应该用作单独的光标修饰符。也停止进行反动编辑。提问时复制并粘贴实际代码。这有多难?如果您不断改变并声称您仍然有问题,那么我们很难相信您实际上是这样运行的。
  • 请参阅How to create a Minimal, Complete, and Verifiable example 并在询问之前按照包含的步骤进行操作。如前所述,当我们可以轻松地指向您并说您的用法与方法签名不匹配时,实际查看文档也有帮助。
  • 并查看.toArray()Cursor 的文档。这些是作用于回调和承诺的东西,而不是你把它们放在哪里。你不能return cursor.toArray() 而是你的回调应该在的地方。您确实需要阅读这些文档链接,因为那里的所有示例都显示了您没有遵循的清晰使用示例。

标签: node.js mongodb azure azure-cosmosdb


【解决方案1】:

cosmos DB 的神奇之处在于使用 $elemMatch。结案。

mongoDB.collection('mycol', (err, collection) => {            
    if (err) throw err;            
    collection.find({tags: {$elemMatch:{$in : ['keyword']}}}).toArray((err, docs) => {
        console.log(docs);
    });
});

【讨论】:

    猜你喜欢
    • 2021-06-15
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多