如何查询Mongo中充满对象的子文档?

时间:2015-09-08 16:15:28

标签: mongodb meteor

所以我有一个包含未知数量对象的文档,每个文档都有2个属性。它是朋友列表的集合,在我允许用户发送请求之前,我尝试确认某人是否有朋友使用了某个用户名。我将朋友列表保存在子文档中,如下所示:

>>all the _id and other properties<<, "ownerFriends":[{"friendId":"an id goes here", "friendUsername": "username"}, {"friendId":"another id", "friendUsername":"username2"}]

我试图做一个将返回username2的查询,如果将其作为输入,但我不知道如何使用点表示法,因为我认为您需要知道要查看的特定属性for,这些是ownerFriends属性中的非正统数量的朋友对象。

2 个答案:

答案 0 :(得分:0)

如果要选择ownerFriend username作为friendUserName的{​​{1}}对象,可以使用以下选择器(假设您的收藏称为好友):

Friends.find({
    "ownerFriends.friendUsername": "username2"
}, {
    fields: { "ownerFriends.$": 1}
});

您可以在此处找到有关如何根据属性查询对象数组的详细说明:

http://www.curtismlarson.com/blog/2015/08/08/meteor-mongodb-array-property-selector/

答案 1 :(得分:0)

总之,您有一个包含键的对象,其中一个键是一个对象数组。您可以使用$elemMatch在阵列上执行查询:

MyCollection.find({ ownerFriends: { $elemMatch: { friendUsername: searchString }}});

虽然我认为您还需要查询当前用户的_id。我不知道您的收藏细节,我只能推测:

MyCollection.find({ userId: Meteor.userId(), ownerFriends: { $elemMatch: { friendUsername: searchString }}});