Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose:查找具有多个条目的混合模式类型文档_Node.js_Mongodb_Mongoose - Fatal编程技术网

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" } }});