Mongodb按ID加载

时间:2017-11-14 20:54:28

标签: javascript mongodb angular meanjs

这里可能很简单。 我有2个mongoDb集合,一个(用户)有一个objectId,另一个(上市)有userId。

我想通过搜索objectId(currentUser._id)来获取列表集合中的文档。

我该怎么做?

页面组件我想在以下位置显示列表:

export class ManageComponent implements OnInit {
    listing : Listing;
    listings: Listing[] = [];
currentUser: User;

constructor(
    private listingService: ListingService,
    private userService: UserService) {
        this.currentUser = JSON.parse(localStorage.getItem('currentUser'));
     }  

ngOnInit() {
    this.loadAllListings();
} 

private loadAllListings() {
    this.listingService.getAll().subscribe(listings => { this.listings = listings; });
}


private loadById(userId: string) {
    this.listingService.getById(userId).subscribe(listings => { this.listings = listings});
    }
}

我有一个用于CRUD操作的列表服务(一些省略)

import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions, Response } from '@angular/http';

import { Listing } from '../_models/index';

@Injectable()
export class ListingService {

constructor(private http: Http) { }

getAll() {
    return this.http.get('/listings').map((response: Response) => response.json());
}

getById(_id: string) {
    return this.http.get('/listings/' + _id).map((response: Response) => response.json());
}

getByUserId(userId: string) {
    return this.http.get('/listings/' + userId).map((response: Response) => response.json());
}

create(listing: Listing) {
    return this.http.post('/listings/add', listing);
}

使用服务器端服务的服务器端列表控制器(见下文):

function getRelevant(req, res) {
listingService.getByUserId(req.listing.sub)
    .then(function (listing) {
        if (listing) {
            res.send(listing);
        } else {
            res.sendStatus(404);
        }
    })
    .catch(function (err) {
        res.status(400).send(err);
    });
}

服务器端列表服务:

function getByUserId(userId) {
var deferred = Q.defer();

db.listings.findById(userId, function (err, listing) {
    if (err) deferred.reject(err.name + ': ' + err.message);

    if (listing) {
        // return listing 
        deferred.resolve(listing);
    } else {
        // listing not found
        deferred.resolve();
    }
});

return deferred.promise;
}

2 个答案:

答案 0 :(得分:0)

db.listings.aggregate([$ lookup:{           来自:"用户",           localField:" currentUser._id",           foreignField:" _id",           as:"结果"         }    } ])。找一个({ user_id:您要搜索的ID })

答案 1 :(得分:0)

MongoDB的函数findById()将按功能运行的Id找到当前模型的文档(db.listings.findById()将按列表ID查找所有列表)。

也就是说,如果您希望find按照模型中的其他条件(listing)。你需要做find({query})

特别是在您的情况下,您需要:

const query = {userId: userIdThatIsPassedIn};
db.listings.find(query).exec(callback);