Node.js Mongoose:查找具有多个条目的混合模式类型文档
我的数据模型大致如下所示:Node.js Mongoose:查找具有多个条目的混合模式类型文档,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我的数据模型大致如下所示: data = { ... parameters: [{type:Schema.Types.mixed}], ... } 如果我现在将文档插入数据库 doc = { ... parameters:[{"foo":"bar"}], ... } 我可以通过参数键查询: db.dataset.find({"parameters":[{"foo":"bar"}]},function(doc){ ... }) 并取回预期的文档。但是,
data = {
...
parameters: [{type:Schema.Types.mixed}],
...
}
如果我现在将文档插入数据库
doc = {
...
parameters:[{"foo":"bar"}],
...
}
我可以通过参数键查询:
db.dataset.find({"parameters":[{"foo":"bar"}]},function(doc){
...
})
并取回预期的文档。但是,如果参数包含多个键,例如
doc = {
...
parameters:[{"foo":"bar","ding":"dong"}]
...
}
我再也找不到了。为什么?这是因为查询无法匹配数组字段参数值为确切数组对象[{foo:bar,ding:dong}]的任何文档。为了演示这一点,让我们在集合中插入两个示例文档:
/* 0 */
{
"_id" : ObjectId("551d777fcfd33f4e2a61e48f"),
"parameters" : [
{
"foo" : "bar"
}
]
}
/* 1 */
{
"_id" : ObjectId("551d777fcfd33f4e2a61e490"),
"parameters" : [
{
"foo" : "bar",
"ding" : "dong"
}
]
}
使用此对象数组[{foo:bar}]查询此集合中的参数数组时,将得到具有_id:ObjectId551d777fcfd33f4e2a61e48f的文档。但是,如果将查询对象更改为使用,则它将同时带来以下两个文档:
db.collection.find({"parameters": { "$elemMatch": { "foo": "bar" } }});
这是因为查询无法匹配数组字段参数值为确切数组对象[{foo:bar,ding:dong}]的任何文档。为了演示这一点,让我们在集合中插入两个示例文档:
/* 0 */
{
"_id" : ObjectId("551d777fcfd33f4e2a61e48f"),
"parameters" : [
{
"foo" : "bar"
}
]
}
/* 1 */
{
"_id" : ObjectId("551d777fcfd33f4e2a61e490"),
"parameters" : [
{
"foo" : "bar",
"ding" : "dong"
}
]
}
使用此对象数组[{foo:bar}]查询此集合中的参数数组时,将得到具有_id:ObjectId551d777fcfd33f4e2a61e48f的文档。但是,如果将查询对象更改为使用,则它将同时带来以下两个文档:
db.collection.find({"parameters": { "$elemMatch": { "foo": "bar" } }});