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" : " "
}
}