【发布时间】: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