示例文档:
{
"name":"Bob Belcher",
"children":[
"Tina",
"Louise",
"Gene"
]
}
我想通过询问找到一份文件: 包含儿童"蒂娜"并包含儿童"路易斯"
同样我该怎么做: 包含儿童"蒂娜"并且不包含儿童"杰克"
这可以用子对象而不是字符串来完成吗? 包含名字=" Tina" AND包含名称=" Louise"
的孩子示例文档:
{
"name":"Bob Belcher",
"children":[
{
"name":"Tina"
},
{
"name":"Louise"
},
{
"name":"Gene"
}
]
}
还有一个,我们可以做多层深层次吗?
{
"name":"Bob Belcher",
"children":[
{
"name":"Tina",
"pets":[
"Spot",
"Snowball"
]
},
{
"name":"Louise",
"pets":[
"Liz"
]
},
{
"name":"Gene"
}
]
}
我能问一些类似的话: 包含含有宠物的孩子" Spot" AND包含包含宠物的孩子" Snowball"
答案 0 :(得分:0)
1)属性children
定义为SET
Dynamodb数据类型,可以使用CONTAINS
和NOT CONTAINS
进行过滤。例如: -
FilterExpression: " contains (product, :productSet) AND not contains (product, :productSetNotContains)",
ExpressionAttributeValues : {
':key1' : 2016,
':titleval' : "The Big New Movie 1",
':productSet' : "milk",
':productSetNotContains' : "egg"
}
2)属性children
定义为LIST
DynamoDB数据类型,可以使用CONTAINS
进行过滤。
var childrenTina = {"name":"Tina"};
var childrenLouise = {"name":"Louise"};
FilterExpression: " contains (children, :childrenTina) AND contains (children, :childrenLouise) ",
ExpressionAttributeValues : {
':key1' : 2016,
':titleval' : "The Big New Movie 1",
':childrenTina' : childrenTina,
':childrenLouise' : childrenLouise
}
3)对于深度分层的数组,如果元素的整个值已知,则可以使用CONTAINS进行过滤,即为了匹配Tina,还需要Pets属性的值。
在DynamoDB术语中,以下结构意味着存在MAP inside LIST
,即LIST中的每个元素都是MAP。只要整个MAP数据可用,CONTAINS函数就可用于过滤数据。
"name":"Tina",
"pets":[
"Spot",
"Snowball"
]