我正在努力创建一个查找查询,找到包含" Item1"的节点。
{
"_id" : ObjectId("589274f49bd4d562f0a15e07"),
"Value" : [["Item1", {
"Name" : "John",
"Age" : 45
}], ["Item2", {
"Address" : "123 Main St.",
"City" : "Hometown",
"State" : "ZZ"
}]]
}
在这个例子中," Item1"不是键/值对,而是一个字符串,它是作为更大数组的一部分的数组的一部分。这是一种传统格式,因此我无法对其进行调整。
我尝试过类似{ Value: {$elmemmatch:{$elemmatch:{"Item1"}}}
的内容,但这并没有返回任何匹配项。类似地,$regex
不起作用,因为它似乎只匹配字符串对象(并且整个对象不是字符串,而是数组中数组中的字符串)。
答案 0 :(得分:1)
所以试试这个:
db.collection.find({'Value':{$elemMatch:{$elemMatch:{$in:['Item1']}}}})
或者运行此选项以获取特定的Item
db.collection.find({},{'Value':{$elemMatch:{$elemMatch:{$in:['Item1']}}}})
希望这有帮助。
答案 1 :(得分: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它有效。 您的数据结构存在错误