Javascript 如何按模式查找但排除条件列表
嗨,我有点被Mongo/Mongoose查询卡住了,我需要帮助 我有一个名为friends的对象数组(例如创建假数据): 朋友们:Javascript 如何按模式查找但排除条件列表,javascript,node.js,mongodb,mongodb-query,Javascript,Node.js,Mongodb,Mongodb Query,嗨,我有点被Mongo/Mongoose查询卡住了,我需要帮助 我有一个名为friends的对象数组(例如创建假数据): 朋友们: [ {username: "Anders", age: 10}, {username: "Bella", age: 21}, {username: "Debbie", age: 22} ] 我还想在Mongo中查询一个名为people的表: 人民: [ {username: "Anders", age: 10},
[
{username: "Anders", age: 10},
{username: "Bella", age: 21},
{username: "Debbie", age: 22}
]
我还想在Mongo中查询一个名为people的表:
人民:
[
{username: "Anders", age: 10},
{username: "Andrew", age: 20},
{username: "Annmarie", age: 28},
{username: "Bella", age: 21},
{username: "Carl", age: 40},
{username: "Debbie", age: 22}
]
我的问题是,我想从用户名以“An”开头的人那里检索所有文档,但不包括出现在friends数组中的文档。我不想搜索所有用户名以“An”开头的文档,然后再过滤掉,因为我的数据库相当大。有一个操作符,您可以应用到朋友列表中,以确保所有人都被排除在结果之外。另一部分是一个简单的运算符,用于匹配以“An”开头的名称:
var-friends=[
{用户名:“安德斯”,年龄:10},
{用户名:“贝拉”,年龄:21},
{用户名:“黛比”,年龄:22}
];
var query={“$nor”:friends,“username”:{“$regex”:“^An”};
这里最有效的索引显然是“用户名”和“年龄”,请注意,在这里锚定“regex”是唯一对您有效的方法。与@NeilLunn提到的方法不同的方法可能是重新构建数据,以包含所有人,并区分他们与类似字段的关系
{username: "Anders", age: 10, tags: ['friend']},
{username: "Andrew", age: 20},
{username: "Annmarie", age: 28},
{username: "Bella", age: 21, tags : ['friend']},
{username: "Carl", age: 40},
{username: "Debbie", age: 22, tags : ['friend']}
然后执行如下查询
db.people.find({username:{$regex:"^An"},tags:{$nin:['friends']})
这种方法有几个优点
朋友
加载到一个数组中,并在第二个查询中排除它们