2017-08-26 188 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); 
    }); 
});