2017-02-02 30 views
1

我竭力創造一個發現查詢發現,含有「項目1」的節點目標節點。如何找到包含一個字符串值

{ 
    "_id" : ObjectId("589274f49bd4d562f0a15e07"), 
    "Value" : [["Item1", { 
     "Name" : "John", 
     "Age" : 45 
     }], ["Item2", { 
     "Address" : "123 Main St.", 
     "City" : "Hometown", 
     "State" : "ZZ" 
     }]] 
} 

在這個例子中,「項目1」不是一個鍵/值對,而只是一個字符串,它是一個數組,它是一個較大的陣列的一部分的一部分。這是一種傳統格式,所以我不能很好地調整它。

我已經試過類似:{ Value: {$elmemmatch:{$elemmatch:{"Item1"}}},但沒有返回任何比賽。類似地,$regex不工作,因爲它似乎只匹配字符串對象(和整體對象不是字符串,但在一個陣列中的陣列的字符串)。

回答

1

看來您應該使用$in$eq運算符來匹配值。

那麼試試這個:

db.collection.find({'Value':{$elemMatch:{$elemMatch:{$in:['Item1']}}}}) 

或者運行,以獲得特定Item

db.collection.find({},{'Value':{$elemMatch:{$elemMatch:{$in:['Item1']}}}}) 

希望這有助於。

+0

這個工作如果可能的話,你可以解釋爲什麼爲什麼會'$於:?[「項目1」]'比賽,但不是'$ EQ:「項目1」'? –

+0

@SimonGillbee其實,你可以使用'eq'也一樣,它工作得很好,你可以從鏈接簽出該文檔。 – McGrady

0
var data = { 
"_id":"ObjectId('589274f49bd4d562f0a15e07')", 
"Value":[ 
    [ 
    "Item1", 
    { 
     "Name":"John", 
     "Age":45 
    } 
    ], 
    [ 
    "Item2", 
    { 
     "Address":"123 Main St.", 
     "City":"Hometown", 
     "State":"ZZ" 
    } 
    ] 
] 
} 

data.Value[0][0] // 'Item1' 

將其複製並粘貼到repl上。 您的數據結構出錯

+0

噢,對不起,這不是你想要的((( –

相關問題