【发布时间】:2019-10-29 17:56:03
【问题描述】:
我是 node + Mongo 的新手。我在 mongoDB 中有以下结构的数据:
var data = [{
id:1,
createdBy:"test",
sharedTo:["john","shekar"]
},
{
id:2,
createdBy:"steve",
sharedTo:["test","shekar"]
},
{
id:3,
createdBy:"mark",
sharedTo:["steve","test"]
},
{
id:4,
createdBy:"akuni",
sharedTo:["john","shekar","mark"]
},
{
id:5,
createdBy:"test",
sharedTo:["mark","shekar"]
},
{
id:6,
createdBy:"mark",
sharedTo:["test","akuni"]
}]
我想查询这个以获取用户“test”创建的所有记录以及共享给“test”的那些记录。我该怎么做?
预期结果:
[{
id:1,
createdBy:"test",
sharedTo:["john","shekar"]
},
{
id:5,
createdBy:"test",
sharedTo:["mark","shekar"]
},
{
id:6,
createdBy:"mark",
sharedTo:["test","akuni"]
}]
我尝试过类似的东西
var user = "test";
data.find({createdBy:user,sharedTo:{$elemMatch:[user]}},function(err, resp){
});
但它返回的是空的
【问题讨论】:
-
您实际尝试过什么查询?人们通常很乐意帮助,当你很清楚你已经做出了一些努力,但问题中没有任何查询尝试。此外,这里根本没有“嵌套数组”组件。老实说,我建议阅读核心文档中的Query Documents,因为您似乎并不熟悉 MongoDB 查询的基础知识。这将帮助您并减轻您为遇到的每件新事物发布问题的需要。 MongoDB 真的不在乎您的字符串是否在数组中。
-
如果链接的答案和文档不够直接清晰,那么这个基本上是
.find({ "$or": [{ "createdBy": "test" }, { "sharedTo": "test" }] })解决的 -
你也应该看看
$elemMatch运算符。 -
@Dijkstra 你真的不应该。这与
$elemMatch无关。我建议您查看核心文档中的Specify Multiple Conditions for Array of Documents,以便您也可以真正了解何时以及为什么使用$elemMatch。这不是其中一种情况。 -
@NeilLunn 谢谢你的建议。我真的很感激。
标签: node.js mongodb mean-stack