2017-08-26 189 views
0

我的文档有一个名为'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(); 
        } 
       }); 
      } 
     ); 
    }); 
}); 
+0

“$ in”的参数意味着是一个数组,你只是发送一个字符串。无论如何,你可能只需要'{tags:'关键字'}。您不需要特殊的操作符来匹配数组中的“存储”项。这是另一种方式,作为一个“可能值列表”来匹配。 –

+0

我试过{tags:'keyword'}。它也不起作用。 – 3irhui34t34

+0

也可以看看['.find()'](http://mongodb.github.io/node-mongodb-native/2.2/api/Collection.html#find)的实际API规范,因为你不是提供有效的参数。 '.sort()'和'.limit()'应该用作单独的游标修饰符。也停止进行反动编辑。您在提问时复制并粘贴您的实际代码。那有多难?如果你不断改变事情并声称你仍然有问题,那么我们很难相信你实际上是这样做的。 –

回答

0

与cosmos DB的魔术技巧是使用$ elemMatch。案件关闭。

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