Node.js 如何从对象';mongodb中的s数组

Node.js 如何从对象';mongodb中的s数组,node.js,mongodb,sails.js,Node.js,Mongodb,Sails.js,我有一行,其中包含如下数据: { "_id" : ObjectId("5bcef76b0c9a4c194cf6d0a7"), "userid" : ObjectId("5bc5ae4355418805b8caabb3"), "transactionid" : "ch_1DON67EzCa9AoDtY51kialzs", "adminid" : [ "5b5af339bc69c511816e8a2f", "5b87948d97b752

我有一行,其中包含如下数据:

{
    "_id" : ObjectId("5bcef76b0c9a4c194cf6d0a7"),
    "userid" : ObjectId("5bc5ae4355418805b8caabb3"),
    "transactionid" : "ch_1DON67EzCa9AoDtY51kialzs",
    "adminid" : [
        "5b5af339bc69c511816e8a2f",
        "5b87948d97b752099c086708"
    ],
    "amount" : 3220,
    "ispaid" : true,
    "products" : [
        {
            "productid" : ObjectId("5bceba35003c87043997a1d4"),
            "quantity" : 2,
            "price" : 200,
            "type" : "product",
            "isCanceled" : false,
            "isDeliverd" : false,
            "createdby" : "schooladmin",
            "userid" : ObjectId("5b87948d97b752099c086708"),
            "isReadyToPickup" : false,
            "name" : "The Second Product",
            "description" : "                "
        },
        {
            "productid" : ObjectId("5bc5b2df55418805b8caabbd"),
            "quantity" : 2,
            "price" : 100,
            "type" : "product",
            "isCanceled" : false,
            "isDeliverd" : false,
            "createdby" : "superadmin",
            "userid" : ObjectId("5b5af339bc69c511816e8a2f")
        },
        {
            "productid" : ObjectId("5bc5bc5fe84c3d028aaa269c"),
            "quantity" : 2,
            "price" : 100,
            "type" : "product",
            "isCanceled" : false,
            "isDeliverd" : false,
            "createdby" : "superadmin",
            "userid" : ObjectId("5b5af339bc69c511816e8a2f")
        }
],
    "paymentUsing" : "card",
    "cardBrand" : "Visa",
    "country" : "US",
    "paymentDate" : "2018-10-23T10:26:51.856Z"
}
我想对产品对象的所有元素执行搜索。若其中任何一个匹配,那个么整个对象将存储在数组变量中

假设,我尝试从名称对象中搜索第二个产品字符串 产品的数量阵列。那就是给我所有的元素。像

[
    {
        "productid" : ObjectId("5bceba35003c87043997a1d4"),
        "quantity" : 2,
        "price" : 200,
        "type" : "product",
        "isCanceled" : false,
        "isDeliverd" : false,
        "createdby" : "schooladmin",
        "userid" : ObjectId("5b87948d97b752099c086708"),
        "isReadyToPickup" : false,
        "name" : "The Second Product",
        "description" : "                "
    } 
]
若找到两个或多个元素,它将相应地返回数组

请给我建议解决办法。 提前谢谢。:)

类似这样:

db.collection.find({products: {$elemMatch: {name:'The Second Product'}}})
使用该方法可以得到预期的结果

方法1:

如果没有嵌套数组,则使用更简单的方法

在中使用,以获得所需的结果

db.collection_name.aggregate([
  {
    $project: {
      products: {
        $filter: {
          input: "$products",
          as: "product",
          cond: {
            $eq: [
              "$$product.name",
              "The Second Product"
            ]
          }
        }
      }
    }
  }
])
方法2:

要展开
产品阵列

检索匹配文档的步骤

仅投影所需的输出元素

db.collection_name.aggregate([
 { $unwind: "$products" },
 { $match:{"products.name":"The Second Product"} }, 
 { $project:{products:1}} 
])
上述查询的输出(方法1或方法2)


这是检查精确匹配字符串还是允许部分字符串?精确匹配字符串,但您可以使用reqexp,据我所知,mongodb支持这一点。好的,我会检查它。非常感谢。方法2是最好的。非常感谢。
{
        "_id" : ObjectId("5bcef76b0c9a4c194cf6d0a7"),
        "products" : {
                "productid" : ObjectId("5bceba35003c87043997a1d4"),
                "quantity" : 2,
                "price" : 200,
                "type" : "product",
                "isCanceled" : false,
                "isDeliverd" : false,
                "createdby" : "schooladmin",
                "userid" : ObjectId("5b87948d97b752099c086708"),
                "isReadyToPickup" : false,
                "name" : "The Second Product",
                "description" : "                "
        }
}