Azure Cosmos DB(mongodb)find()with'$ in'查询不返回任何东西
问题描述:
我的文档有一个名为'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();
}
});
}
);
});
});
答
与cosmos DB的魔术技巧是使用$ elemMatch。案件关闭。
mongoDB.collection('mycol', (err, collection) => {
if (err) throw err;
collection.find({tags: {$elemMatch:{$in : ['keyword']}}}).toArray((err, docs) => {
console.log(docs);
});
});
“$ in”的参数意味着是一个数组,你只是发送一个字符串。无论如何,你可能只需要'{tags:'关键字'}。您不需要特殊的操作符来匹配数组中的“存储”项。这是另一种方式,作为一个“可能值列表”来匹配。 –
我试过{tags:'keyword'}。它也不起作用。 – 3irhui34t34
也可以看看['.find()'](http://mongodb.github.io/node-mongodb-native/2.2/api/Collection.html#find)的实际API规范,因为你不是提供有效的参数。 '.sort()'和'.limit()'应该用作单独的游标修饰符。也停止进行反动编辑。您在提问时复制并粘贴您的实际代码。那有多难?如果你不断改变事情并声称你仍然有问题,那么我们很难相信你实际上是这样做的。 –